DUPLICATE:Windowsユーザーが自分の画面(Windowsの+のL)をロックして、もう一度それをアンロックしてい私は(実行時に)検出することができますどのようにHow can I programmatically determine if my workstation is locked?のC#とワークステーションのロック/アンロックの変更の確認
。私はキーボード入力をグローバルに追跡できることは知っていますが、そのようなことを環境変数で確認することは可能ですか?
DUPLICATE:Windowsユーザーが自分の画面(Windowsの+のL)をロックして、もう一度それをアンロックしてい私は(実行時に)検出することができますどのようにHow can I programmatically determine if my workstation is locked?のC#とワークステーションのロック/アンロックの変更の確認
。私はキーボード入力をグローバルに追跡できることは知っていますが、そのようなことを環境変数で確認することは可能ですか?
この通知は、WM_WTSSESSION_CHANGEメッセージで取得できます。 WTSRegisterSessionNotificationを介してこれらのメッセージを受信し、WTSUnRegisterSessionNotificationを使用して登録を解除することをWindowsに通知する必要があります。
これらの投稿は、C#の実装に役立ちます。
http://pinvoke.net/default.aspx/wtsapi32.WTSRegisterSessionNotification
http://blogs.msdn.com/shawnfa/archive/2005/05/17/418891.aspx
http://bytes.com/groups/net-c/276963-trapping-when-workstation-locked
数秒で私を叩きました:) – shahkalpesh
-1:このマネージコード版は、Win32版が登場する前に投稿されました...なぜこれも正解とマークされていますか? – Powerlord
ほとんどダウンボートの理由はありませんか? –
SessionSwitchイベントがこれに最も適しています。 SessionSwitchEventArgsを通過したSessionSwitchReasonをチェックして、スイッチの種類を調べ、適切に対応してください。
あなたは絶対にだけ内部WTTS APIを使用WM_WTSSESSION_CHANGE 必要はありません。
これらのイベントを取得する別の方法として、ComponentDispatcher
を使用できます。
これをラップするクラスの例を次に示します。
public class Win32Session
{
private const int NOTIFY_FOR_THIS_SESSION = 0;
private const int WM_WTSSESSION_CHANGE = 0x2b1;
private const int WTS_SESSION_LOCK = 0x7;
private const int WTS_SESSION_UNLOCK = 0x8;
public event EventHandler MachineLocked;
public event EventHandler MachineUnlocked;
public Win32Session()
{
ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
}
void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
{
if (msg.message == WM_WTSSESSION_CHANGE)
{
int value = msg.wParam.ToInt32();
if (value == WTS_SESSION_LOCK)
{
OnMachineLocked(EventArgs.Empty);
}
else if (value == WTS_SESSION_UNLOCK)
{
OnMachineUnlocked(EventArgs.Empty);
}
}
}
protected virtual void OnMachineLocked(EventArgs e)
{
EventHandler temp = MachineLocked;
if (temp != null)
{
temp(this, e);
}
}
protected virtual void OnMachineUnlocked(EventArgs e)
{
EventHandler temp = MachineUnlocked;
if (temp != null)
{
temp(this, e);
}
}
}
この質問に対する回答があなたの出発点となるかもしれません。みんなに感謝します。 http://stackoverflow.com/questions/44980 –
あなたはいつものようにとても役に立ちました:) –