WorkStationLockController


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