現在ログインしているユーザーの.NET収集システム(管理者が等しく効果的に実行)

ので、次はまた、靴底学ぶために続けるに便利getで来た最後のリファレンスドキュメントを共有して仕上げ、より完全な記事が見ていないので、今日は、現在のシステムのログインユーザー名の下に取得.NETを使用する方法を学びます。

まず、簡単な知識

私は多くの人最初の本能は、.NET環境変数を使用することであると信じています。

Environment.UserName

しかし、多くの人々がこの事実を、環境変数は、管理者ではなく、ログオンしているユーザーの実際の電流としてこれを取得するには、実行するには、管理者が影響を受けるので、私の記事があるかもしれません。

ここでの考え方はWINDOWSAPIを取得するために行って使用することです検索機能のAPIを取得するための様々な情報を通じて、

[DLLIMPORT(" Wtsapi32.dllが" )]
 保護 静的 にexternを BOOL(のIntPtr hServer、WTSQuerySessionInformation INTセッションID、WTSInfoClass wtsInfoClass、アウトのIntPtr ppBuffer、アウト UINT pBytesReturned)。

第二に、具体的には、実装する方法を示し

1. APIインタフェースの導入

[DLLIMPORT(" Wtsapi32.dll " )]
 保護 静的 にextern  ボイドWTSFreeMemory(のIntPtrポインタ); 

[DLLIMPORT(" Wtsapi32.dllが" )]
 保護 静的 にexternを BOOL(のIntPtr hServer、WTSQuerySessionInformation INTセッションID、WTSInfoClass wtsInfoClass、アウトのIntPtr ppBuffer、アウト UINT pBytesReturned)。

ここで紹介WTSFreeMemory方法は主に、アンマネージリソースを解放するために使用されます。

2. WTSInfoClassクラス定義

パブリック 列挙WTSInfoClass 
{ 
    WTSInitialProgram、
    WTSApplicationName、
    WTSWorkingDirectory、
    WTSOEMId、
    WTSSessionId、
    WTSUserName、
    WTSWinStationName、
    WTSDomainName、
    WTSConnectState、
    WTSClientBuildNumber、
    WTSClientName、
    WTSClientDirectory、
    WTSClientProductId、
    WTSClientHardwareId、
    WTSClientAddress、
    WTSClientDisplay、
    WTSClientProtocolType、
    WTSIdleTime、
    WTSLogonTime、
    WTSIncomingBytes、
    WTSOutgoingBytes、 
    WTSIncomingFrames、
    WTSOutgoingFrames、
    WTSClientInfo、
    WTSSessionInfo 
}
コードの表示

3.現在ログオンしているユーザーの具体的な実装方法を取得します。

///  <要約> 
        ///は、(管理者が実行するために使用することができる)現在のユーザーを取得
         ///  </要約> 
        ///  <戻り値> </戻り> 
        パブリック 静的 文字列GETCURRENTUSER()
        { 
            ;のIntPtrバッファ
            UINT STRLEN ;
             int型の cur_session = - 1。;
             VARのユーザ名= " SYSTEM " ; // これは"\ 0"以下のようにシステムを戻すと仮定
            IF(WTSQuerySessionInformation(IntPtr.Zero、cur_session、WTSInfoClass.WTSUserName、OUTバッファ、OUT STRLEN)&&はstrlen>1
            { 
                ユーザー名 = Marshal.PtrToStringAnsi(バッファ)//は、これらがヌル終了文字列であるとして長さを必要としない
                WTSFreeMemory(バッファ);
                もし(WTSQuerySessionInformation(IntPtr.Zero、cur_session、WTSInfoClass.WTSDomainName、アウトバッファ、アウト)STRLEN && STRLEN> 1 
                { 
                    ユーザー名 = Marshal.PtrToStringAnsi(バッファ)+ " \\ " +名。// 先頭に追加のドメイン名
                    WTSFreeMemory(バッファ); 
                } 
            }
            戻りユーザ名; 
        }
コードの表示

第三に、リファレンスドキュメント

おすすめ

転載: www.cnblogs.com/yokeqi/p/11016800.html