2010-12-02 79 views
1

我试图找出一种方法来检测用户何时按下CTRL-ALT-DEL或Window + L锁定PC 。当用户在VB.net中按下CTRL-ALT-DEL或Window + L时检测到

我正在使用的代码是

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    If (GetAsyncKeyState(17) AndAlso GetAsyncKeyState(18) AndAlso GetAsyncKeyState(46)) Or ((GetAsyncKeyState(91) Or GetAsyncKeyState(92)) AndAlso GetAsyncKeyState(76)) Then 
     Msgbox ("Yes") 
    End If 
End Sub 

然而,一旦用户按下CTRL-ALT-DEL Windows安全窗口弹出,这是太快了,VB检测到该键有被按下。

我对如何解决这个问题做了一些研究,发现可以编写一个GINA存根,它可以将Windows安全屏幕延迟一段时间,比如说2秒,这足以让VB检测到密钥有被按下。

还通过VB禁用CTRL-ALT-德尔不起作用,因为它是速度太快,VB,我想不要禁用CTRL-ALT-DEL

可能有人请让我知道怎么能GINA存根被创建?

+3

对于VB来说这不是“太快”。这是一个特权组合,你将无法拦截。 – 2010-12-02 13:43:31

+0

可能的重复:http://stackoverflow.com/questions/1346689/how-do-i-trap-windows-key-alttab-ctrlaltdelete-in-c – 2010-12-02 13:45:27

回答

2

您可以找到有关GINA的文章在这里:Customizing GINA, Part 1

然而,Windows Vista和起来不再使用GINA所以你不得不看Credential Providers,但我不知道他们是否支持你想要什么去做。

我不确定你需要做什么,但我建议你可能想看看SystemEvents.SessionSwitch在可能有用的情况下(不是自己使用它,但听起来像是一种可能性)。