天天看點

Windows任務管理 連接配接使用者登入資訊 通用類[C#版]

通用類名[ComputerLoginUserInfo.cs] 代碼如下:

Windows任務管理 連接配接使用者登入資訊 通用類[C#版]
Windows任務管理 連接配接使用者登入資訊 通用類[C#版]
代碼

using System;

//---引用

using System.Runtime.InteropServices;

using System.Text;

/// <summary>

/// Windows 任務管理器登入使用者資訊

/// author:Stone_W

/// date:2011.1.14

/// </summary>

public class ComputerLoginUserInfo

{

#region 本機連接配接使用者資訊API封裝

public class TSControl

{

[DllImport("wtsapi32", CharSet = CharSet.Auto, SetLastError = true)]

private static extern bool WTSEnumerateSessions(int hServer, int Reserved,

int Version, ref long ppSessionInfo, ref int pCount);

[DllImport("wtsapi32.dll")]

public static extern void WTSFreeMemory(System.IntPtr pMemory);

public static extern bool WTSLogoffSession(int hServer, long SessionId, bool bWait);

[DllImport("Wtsapi32.dll")]

public static extern bool WTSQuerySessionInformation(

System.IntPtr hServer, int sessionId, WTSInfoClass wtsInfoClass,

out StringBuilder ppBuffer, out int pBytesReturned);

public enum WTSInfoClass

{

WTSInitialProgram,

WTSApplicationName,

WTSWorkingDirectory,

WTSOEMId,

WTSSessionId,

WTSUserName,

WTSWinStationName,

WTSDomainName,

WTSConnectState,

WTSClientBuildNumber,

WTSClientName,

WTSClientDirectory,

WTSClientProductId,

WTSClientHardwareId,

WTSClientAddress,

WTSClientDisplay,

WTSClientProtocolType

}

public enum WTS_CONNECTSTATE_CLASS

WTSActive,

WTSConnected,

WTSConnectQuery,

WTSShadow,

WTSDisconnected,

WTSIdle,

WTSListen,

WTSReset,

WTSDown,

WTSInit,

public struct WTS_SESSION_INFO

public int SessionID;

[MarshalAs(UnmanagedType.LPTStr)]

public string pWinStationName;

public WTS_CONNECTSTATE_CLASS state;

public static WTS_SESSION_INFO[] SessionEnumeration()

//Set handle of terminal server as the current terminal server

int hServer = 0;

bool RetVal;

long lpBuffer = 0;

int Count = 0;

long p;

WTS_SESSION_INFO Session_Info = new WTS_SESSION_INFO();

WTS_SESSION_INFO[] arrSessionInfo;

RetVal = WTSEnumerateSessions(hServer, 0, 1, ref lpBuffer, ref Count);

arrSessionInfo = new WTS_SESSION_INFO[0];

if (RetVal)

{

arrSessionInfo = new WTS_SESSION_INFO[Count];

int i;

p = lpBuffer;

for (i = 0; i < Count; i++)

{

arrSessionInfo[i] = (WTS_SESSION_INFO)Marshal.PtrToStructure(new IntPtr(p),

Session_Info.GetType());

p += Marshal.SizeOf(Session_Info.GetType());

}

WTSFreeMemory(new IntPtr(lpBuffer));

}

else

//Insert Error Reaction Here

return arrSessionInfo;

}

#endregion

public System.Collections.Generic.List<ComputerLoginUserInfoModel> ComputerLoginUserInfoList;

public ComputerLoginUserInfo()

#region 查詢代碼

TSControl.WTS_SESSION_INFO[] pSessionInfo = TSControl.SessionEnumeration();

ComputerLoginUserInfoModel cum = null;

ComputerLoginUserInfoList = new System.Collections.Generic.List<ComputerLoginUserInfoModel>();

for (int i = 0; i < pSessionInfo.Length; i++)

if ("RDP-Tcp" != pSessionInfo[i].pWinStationName)

try

int count = 0;

IntPtr buffer = IntPtr.Zero;

StringBuilder userName = new StringBuilder(); // 使用者名

StringBuilder clientUser = new StringBuilder(); // 用戶端名

StringBuilder stateType = new StringBuilder(); // 會話類型

bool userNameBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,

pSessionInfo[i].SessionID, TSControl.WTSInfoClass.WTSUserName,

out userName, out count);

bool clientUserBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,

pSessionInfo[i].SessionID, TSControl.WTSInfoClass.WTSClientName,

out clientUser, out count);

bool stateTypeBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,

pSessionInfo[i].SessionID, TSControl.WTSInfoClass.WTSWinStationName,

out stateType, out count);

if (userNameBool && clientUserBool && stateTypeBool)

{

cum = new ComputerLoginUserInfoModel();

cum.UserName = userName.ToString();

cum.ClientUserName = clientUser.ToString();

cum.SessionType = stateType.ToString();

}

ComputerLoginUserInfoList.Add(cum);

catch (Exception ex) { }

}

public class ComputerLoginUserInfoModel

#region 使用者資訊字段

private string userName;

private string clientUserName;

private string sessionType;

/// 會話類型

public string SessionType

get { return sessionType; }

set { sessionType = value; }

/// 用戶端名

public string ClientUserName

get { return clientUserName; }

set { clientUserName = value; }

/// 登入使用者名

public string UserName

get { return userName; }

set { userName = value; }

使用:ComputerLoginUserInfo uif = new ComputerLoginUserInfo();

      foreach (ComputerLoginUserInfoModel item in uif.ComputerLoginUserInfoList)

      {

          Response.Write(item.UserName);

      }

 ps:尊重勞動人民成果,技術是共享的,但如果引用代碼請注明出處謝謝.

[引用位址:

http://www.cnblogs.com/stone_w/archive/2011/01/14/1935219.html

Windows任務管理 連接配接使用者登入資訊 通用類[C#版]

如果本文對你有所幫助,請打賞——1元就足夠感動我:)

Windows任務管理 連接配接使用者登入資訊 通用類[C#版]
Windows任務管理 連接配接使用者登入資訊 通用類[C#版]

聯系郵箱:[email protected]

我的GitHub:

https://github.com/vipstone

關注公衆号:

Windows任務管理 連接配接使用者登入資訊 通用類[C#版]

作者:

王磊

出處:

http://vipstone.cnblogs.com/

本文版權歸作者和部落格園共有,歡迎轉載,請标明出處。

繼續閱讀