or
<telerik:RadGridView x:Name=
"UserSessionGrid"
IsReadOnly=
"True"
FontWeight=
"Bold"
AutoGeneratingColumn=
"UserSessionGrid_AutoGeneratingColumn"
CanUserResizeColumns=
"False"
CanUserDeleteRows=
"False"
CanUserResizeRows=
"False"
ClipboardCopyMode=
"All"
Copied=
"UserSessionGrid_Copied"
>
<telerik:RadContextMenu.ContextMenu>
<telerik:RadContextMenu Opened=
"RadContextMenu_Opened"
ItemClick=
"RadContextMenu_ItemClick"
>
<telerik:RadContextMenu.Items>
<telerik:RadMenuItem Header=
"Copy"
/>
<telerik:RadMenuItem Header=
"Disconnect"
/>
<telerik:RadMenuItem Header=
"Logoff"
/>
</telerik:RadContextMenu.Items>
</telerik:RadContextMenu>
</telerik:RadContextMenu.ContextMenu>
</telerik:RadGridView>
/// <summary>
/// Handles the ItemClick event of the RadContextMenu control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Telerik.Windows.RadRoutedEventArgs"/> instance containing the event data.</param>
private
void
RadContextMenu_ItemClick(
object
sender, Telerik.Windows.RadRoutedEventArgs e)
{
RadContextMenu menu = (RadContextMenu)sender;
RadMenuItem clickedItem = e.OriginalSource
as
RadMenuItem;
GridViewRow row = menu.GetClickedElement<GridViewRow>();
GridViewCell cell = menu.GetClickedElement<GridViewCell>();
GridViewRowItem rowitem = menu.GetClickedElement<GridViewRowItem>();
if
(clickedItem !=
null
&& row !=
null
)
{
string
header = Convert.ToString(clickedItem.Header);
switch
(header)
{
case
"Copy"
:
Clipboard.SetText(cell.Value.ToString());
break
;
case
"Disconnect"
:
// Grab Server Name Column and Session ID Column Data
break
;
case
"Logoff"
:
// Grab Server Name Column and Session ID Column Data
break
;
default
:
break
;
}
}
}
/// <summary>
/// Handles the Opened event of the RadContextMenu control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="RoutedEventArgs"/> instance containing the event data.</param>
private
void
RadContextMenu_Opened(
object
sender, RoutedEventArgs e)
{
RadContextMenu menu = (RadContextMenu)sender;
GridViewRow row = menu.GetClickedElement<GridViewRow>();
if
(row !=
null
)
{
row.IsSelected = row.IsCurrent =
true
;
GridViewCell cell = menu.GetClickedElement<GridViewCell>();
if
(cell !=
null
)
{
cell.IsCurrent =
true
;
}
}
else
{
menu.IsOpen =
false
;
}
}
class
Session
{
public
String Server {
get
;
set
; }
public
String Domain {
get
;
set
; }
public
String User {
get
;
set
; }
public
int
sID {
get
;
set
; }
public
ConnectionState State {
get
;
set
; }
public
IPAddress IP {
get
;
set
; }
public
String Workstation {
get
;
set
; }
public
DateTime? Connect {
get
;
set
; }
public
DateTime? Login {
get
;
set
; }
public
TimeSpan Idle {
get
;
set
; }
/// <summary>
/// Initializes a new instance of the <see cref="Session"/> class.
/// </summary>
/// <param name="server">The server.</param>
/// <param name="domain">The domain.</param>
/// <param name="user">The user.</param>
/// <param name="session">The session.</param>
/// <param name="state">The state.</param>
/// <param name="ip">The ip.</param>
/// <param name="workstation">The workstation.</param>
/// <param name="connect">The connect.</param>
/// <param name="login">The login.</param>
/// <param name="idle">The idle.</param>
public
Session (
string
server,
string
domain,
string
user,
int
session, ConnectionState state, IPAddress ip,
string
workstation, DateTime? connect, DateTime? login, TimeSpan idle)
{
this
.Server = server.ToUpper();
this
.Domain = domain.ToUpper();
this
.User = user;
this
.sID = session;
this
.State = state;
this
.IP = ip;
this
.Workstation = workstation.ToUpper();
this
.Connect = connect;
this
.Login = login;
this
.Idle = idle;
}
}
/// <summary>
/// Handles the DoWork event of the worker control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="DoWorkEventArgs"/> instance containing the event data.</param>
private
void
worker_DoWork(
object
sender, DoWorkEventArgs e)
{
App.Current.Dispatcher.Invoke((Action)
delegate
{
UserSessionGrid.IsBusy =
true
;
});
ITerminalServicesManager manager =
new
TerminalServicesManager();
foreach
(var ServerName
in
ServerList)
{
using
(ITerminalServer server = manager.GetRemoteServer(ServerName))
{
try
{
server.Open();
foreach
(ITerminalServicesSession session
in
server.GetSessions())
{
items.Add(
new
Session(server.ServerName, session.DomainName, session.UserName, session.SessionId, session.ConnectionState, session.ClientIPAddress, session.WindowStationName, session.ConnectTime,session.LoginTime, session.IdleTime));
//worker.ReportProgress(session.SessionId);
}
server.Close();
}
catch
(Win32Exception) { }
catch
(SystemException) { }
catch
(Exception) { }
}
}
}
droppedShape.Background = Brushes.Transparent; <br> droppedShape.Position = e.GetPosition(
this
);<br> droppedShape.BorderBrush = Brushes.Transparent;<br> droppedShape.BorderThickness =
new
Thickness(2);<br> droppedShape.Padding =
new
Thickness(0);<br>
this
.Items.Add(droppedShape);