我遇到了一个涉及GetKeyState
的特定行的奇怪问题。我试图在Visual Basic 2010中的窗体之外检测到Windows开始按钮的鼠标左键单击。一个特定的行非常接近成功,但有些错误。下面的具体信息。如何检测鼠标点击开始按钮?
Public Class Form1
Public Declare Function GetKeyState Lib "user32" (ByVal vKey As Integer) As Short
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If GetKeyState(91) < 0 And GetKeyState(1) < 0 Then
MsgBox("Start Button clicked.")
End If
End Sub
End Class
如果我改变行:
If GetKeyState(91) < 0 And GetKeyState(1) < 0 Then
到:
If GetKeyState(91) < 0 Then
我可以通过点击开始按钮触发MSGBOX - 形式外,只使用键盘。点击“开始”按钮的鼠标没有响应。
如果我更改同一行:
If GetKeyState(1) < 0 Then
我可以通过点击鼠标左键触发MSGBOX - 形式外,在OS的任何地方。
然而,当我尝试结合我所认为将被解释为开始按钮的鼠标左键点击:
If GetKeyState(91) < 0 And GetKeyState(1) < 0 Then
什么也没有发生。我该如何做到这一点,当鼠标左键单击“开始”按钮时,MsgBox会被触发?
---------------------------------- Question Addendum ---------- ------------------------------
我现在明白了键盘上的按键与按钮之间的区别屏幕。尽管Windows键会触发开始按钮,但GetKeyState只接受来自键盘的输入。按名称看来,GetKeyState似乎只关心键盘上按键的状态。但是,我看到许多GetKeyState函数在线,包括键盘和鼠标。
但我必须得出结论,GetKeyState不会让我到我的目的地。我运行了一个类似于名为Window Detective的Spy ++的程序,它将Start Button标识为Parent:Shell_traywnd和child:Button。
因此,因此,它似乎对我来说,我创建类似以下内容:
myParent = FindWindow函数(vbNullString, “Shell_traywnd”) myChild = FindWindowEx(myParent,0, “按钮”,vbNullString)
接下来的问题是 - 如何检测孩子是否被点击?在这种情况下,开始按钮是否被称为句柄?还是一个窗口?此外,我知道使用X/Y的鼠标位置,但我不想使用它,因为可以在Windows操作系统中自由地重新安装开始按钮。
你好SSS,你能回顾一下我对上述问题的附录吗?我将非常感谢您的意见。 – reversehalo
我没有这方面的专家,但我发现这个(躲闪!)链接:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=9370&lngWId=3 – SSS
HTTP:// www.pinvoke.net可能也有帮助 – SSS