トップ回答者
PCのロックを認識する方法

質問
回答
-
ロックのイベントはWTSRegisterSessionNotification関数を使うことで通知を受信できるようになると思います。
以下サンプルソースです。
Imports System.Runtime.InteropServices Public Class Form1 Private Const NOTIFY_FOR_THIS_SESSION As Int32 = &H0 Private Const WM_WTSSESSION_CHANGE As Int32 = &H2B1 Private Const WTS_SESSION_LOCK As Int32 = &H7 Private Const WTS_SESSION_UNLOCK As Int32 = &H8 <DllImport("Wtsapi32.dll")> _ Private Shared Function WTSUnRegisterSessionNotification( _ ByVal hWnd As IntPtr) As Boolean End Function <DllImport("Wtsapi32.dll")> _ Private Shared Function WTSRegisterSessionNotification( _ ByVal hWnd As IntPtr, ByVal dwFlags As Int32) As Boolean End Function <DllImport("user32.dll")> _ Private Shared Sub PostQuitMessage( _ ByVal nExitCode As Int32) End Sub Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) WTSRegisterSessionNotification(Me.Handle, NOTIFY_FOR_THIS_SESSION) MyBase.OnHandleCreated(e) End Sub Protected Overrides Sub OnHandleDestroyed(ByVal e As System.EventArgs) WTSUnRegisterSessionNotification(Me.Handle) PostQuitMessage(0) End Sub Protected Overrides Sub WndProc(ByRef m As Message) ' Select Case (m.Msg) Case WM_WTSSESSION_CHANGE Select Case (m.WParam.ToInt32) Case WTS_SESSION_LOCK 'ここにロックイベントに対する処理を記述 MessageBox.Show("WTS_SESSION_LOCK", "WM_SESSION_CHANGE", MessageBoxButtons.OK) Case WTS_SESSION_UNLOCK 'ここにロック解除イベントに対する処理を記述 MessageBox.Show("WTS_SESSION_UNLOCK", "WM_SESSION_CHANGE", MessageBoxButtons.OK) End Select End Select MyBase.WndProc(m) End Sub End Class
- 編集済み kenjinoteMVP 2016年3月22日 4:10
- 回答としてマーク ずっち 2016年3月22日 4:25
すべての返信
-
ロックのイベントはWTSRegisterSessionNotification関数を使うことで通知を受信できるようになると思います。
以下サンプルソースです。
Imports System.Runtime.InteropServices Public Class Form1 Private Const NOTIFY_FOR_THIS_SESSION As Int32 = &H0 Private Const WM_WTSSESSION_CHANGE As Int32 = &H2B1 Private Const WTS_SESSION_LOCK As Int32 = &H7 Private Const WTS_SESSION_UNLOCK As Int32 = &H8 <DllImport("Wtsapi32.dll")> _ Private Shared Function WTSUnRegisterSessionNotification( _ ByVal hWnd As IntPtr) As Boolean End Function <DllImport("Wtsapi32.dll")> _ Private Shared Function WTSRegisterSessionNotification( _ ByVal hWnd As IntPtr, ByVal dwFlags As Int32) As Boolean End Function <DllImport("user32.dll")> _ Private Shared Sub PostQuitMessage( _ ByVal nExitCode As Int32) End Sub Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) WTSRegisterSessionNotification(Me.Handle, NOTIFY_FOR_THIS_SESSION) MyBase.OnHandleCreated(e) End Sub Protected Overrides Sub OnHandleDestroyed(ByVal e As System.EventArgs) WTSUnRegisterSessionNotification(Me.Handle) PostQuitMessage(0) End Sub Protected Overrides Sub WndProc(ByRef m As Message) ' Select Case (m.Msg) Case WM_WTSSESSION_CHANGE Select Case (m.WParam.ToInt32) Case WTS_SESSION_LOCK 'ここにロックイベントに対する処理を記述 MessageBox.Show("WTS_SESSION_LOCK", "WM_SESSION_CHANGE", MessageBoxButtons.OK) Case WTS_SESSION_UNLOCK 'ここにロック解除イベントに対する処理を記述 MessageBox.Show("WTS_SESSION_UNLOCK", "WM_SESSION_CHANGE", MessageBoxButtons.OK) End Select End Select MyBase.WndProc(m) End Sub End Class
- 編集済み kenjinoteMVP 2016年3月22日 4:10
- 回答としてマーク ずっち 2016年3月22日 4:25