我遇到了一個涉及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