PageLastUpdate:2007-07-16/today:
- /yesterday:
-
WorkStationLockController
2007/07/16
WorkStationにロックをかける&何度もロックをかけないように状態を管理するクラスです。
あたりまえですが、ロックを解除することはできません。それができないのがセキュリティの大原則なので。
とりあえず動いたので乗せてみる。シングルトンで作ってあって、一行で呼び出せます。
WorkStationLockController.GetInstance.Lock()
という感じ。とはいっても複数のアプリから呼ばれると、あまりシングルトンである意味はないです。
まあ自分のアプリケーションからは、間違って何度もロックしてしまうのを避けるために。
なんかアドバイスとかある方はお願いします。
Option Strict On
Option Explicit On
Imports Microsoft.Win32
Public Class WorkStationLockController
Private Shared _singleton As WorkStationLockController = New WorkStationLockController()
Private _Locked As Boolean = False
' コンストラクタです。(外部からのアクセス不可)
Private Sub New()
'監視開始
AddHandler SystemEvents.SessionSwitch, AddressOf SessionSwitch
End Sub
Private Sub SessionSwitch(ByVal sender As Object, ByVal e As SessionSwitchEventArgs)
Try
Select Case e.Reason
Case SessionSwitchReason.SessionLock
_Locked = True
Case SessionSwitchReason.SessionUnlock
_Locked = False
End Select
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
' 唯一のインスタンスを取得します。
Public Shared Function GetInstance() As WorkStationLockController
Return _singleton
End Function
Public Function Lock() As Boolean
Try
'特殊機能 Ctrl+Altを押しているとLockされない。
'これがないと、どうにもならなくなることがあるため。
If (My.Computer.Keyboard.CtrlKeyDown = False) And (My.Computer.Keyboard.AltKeyDown = False) Then
If _Locked = False Then
System.Diagnostics.Process.Start("rundll32.exe", "user32.dll,LockWorkStation")
_Locked = True
End If
Return True
Else
Return False
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Function
Public ReadOnly Property IsLocked() As Boolean
Get
Return _Locked
End Get
End Property
Protected Overrides Sub Finalize()
MyBase.Finalize()
Try
RemoveHandler SystemEvents.SessionSwitch, AddressOf SessionSwitch
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class
comment
このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。
最終更新:2007年07月16日 21:46