1

Windowsでは、ログアウトせずにログインしてユーザーを切り替えることができます。そのように、複数のユーザーをログインさせることができますが、1 人しか機能しません。どのユーザーが現在作業しているかを知るにはどうすればよいですか?

4

2 に答える 2

2

実際、C# で microsoft の非常に良い例を見つけました ( Windows セッション状態の検出)。

システム イベント「SessionSwitch」に登録します。

SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);

void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e){
...
}

Win32 での依存関係が必要です

using Microsoft.Win32;

私は試してみましたが、非常にうまく機能し、比較的簡単です。

于 2013-02-07T09:59:29.443 に答える
1

私の知る限り、.NET フレームワークは、これを実現するために必要な API をマネージド コードに公開していません。かなりの数の WINAPI 関数を p/invoke し、.NET 側で少なくとも 1 つの構造体といくつかの列挙型を定義する必要があります。

その道をたどりたい場合は、次のことができます。

  • WTSEnumerateSessions()を呼び出しWTS_CURRENT_SERVER_HANDLEhServer引数を渡します。

  • 返されたWTS_SESSION_INFO構造体を反復処理し、StateメンバーにWTSActiveandWTSConnectedビットが設定されている構造体を見つけます (この場合は 1 つだけである必要があります)。

  • 引数で指定して、SessionIdその構造体のメンバーをWTSQuerySessionInformation()に渡します。WTSUserNameWTSInfoClass

  • 返されたバッファからユーザー名を読み取り、

  • WTSFreeMemory()を使用して、バッファとWTS_SESSION_INFO構造体の配列を解放します。

ご覧のとおり、これは簡単なことではありません。幸運を。

于 2013-02-06T14:03:08.963 に答える