Windowsでは、ログアウトせずにログインしてユーザーを切り替えることができます。そのように、複数のユーザーをログインさせることができますが、1 人しか機能しません。どのユーザーが現在作業しているかを知るにはどうすればよいですか?
2 に答える
実際、C# で microsoft の非常に良い例を見つけました ( Windows セッション状態の検出)。
システム イベント「SessionSwitch」に登録します。
SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e){
...
}
Win32 での依存関係が必要です
using Microsoft.Win32;
私は試してみましたが、非常にうまく機能し、比較的簡単です。
私の知る限り、.NET フレームワークは、これを実現するために必要な API をマネージド コードに公開していません。かなりの数の WINAPI 関数を p/invoke し、.NET 側で少なくとも 1 つの構造体といくつかの列挙型を定義する必要があります。
その道をたどりたい場合は、次のことができます。
WTSEnumerateSessions()を呼び出し
WTS_CURRENT_SERVER_HANDLE
、hServer
引数を渡します。返されたWTS_SESSION_INFO構造体を反復処理し、
State
メンバーにWTSActive
andWTSConnected
ビットが設定されている構造体を見つけます (この場合は 1 つだけである必要があります)。引数で指定して、
SessionId
その構造体のメンバーをWTSQuerySessionInformation()に渡します。WTSUserName
WTSInfoClass
返されたバッファからユーザー名を読み取り、
WTSFreeMemory()を使用して、バッファと
WTS_SESSION_INFO
構造体の配列を解放します。
ご覧のとおり、これは簡単なことではありません。幸運を。