2012-09-16 33 views
2

以下AHK腳本會自動帶來了,當你在uTorrent的圖標在系統任務欄托盤右鍵單擊你通常會得到菜單:這個AHK腳本如何工作?

DetectHiddenWindows, On 
Process, Exist, utorrent.exe 
WinGet, W, List, ahk_pid %ErrorLevel% 
Loop %W% 
{ 
WinGetClass, Class, % "ahk_id" W%A_Index% 
If InStr(Class, "µTorrent") { 
    hWnd := W%A_Index% 
    Break 
}} 
PostMessage, 0x8001, 0,0x204,, ahk_id %hWnd% ; Right Click down 
PostMessage, 0x8001, 0,0x205,, ahk_id %hWnd% ; Right Click Up 

我瞭解大部分除了最後兩行。 0x8001是WM_APP + 1。爲什麼使用WM_APP範圍的消息,以及發出這兩條消息時究竟發生了什麼?非常感謝您的解釋。

+0

道歉捎帶我的問題在這一個。這是由於某種原因關閉作爲題外話,但我覺得非常類似於這個:http://stackoverflow.com/questions/12654588/disabling-windows-7s-hotkey-to-move-window-to-other-monitor如果有人有任何建議,我會非常感激。 –

回答

1

根據MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx#system_defined

如果你的應用程序標記4.0版本,可以爲私人信息通過0xBFFF使用範圍爲0x8000(WM_APP)消息識別符值。

所以這表明0x8001是utorrent選擇的消息的標識符。 0x204和0x205分別用於右鍵單擊事件和上行事件。我的猜測是,這個代碼旨在模擬Windows托盤中的Utorrent圖標的右鍵單擊。

另外,如果你使用Autohotkey_L代碼大概可以簡化爲三條線,並執行相同的:

DetectHiddenWindows, On 
PostMessage, 0x8001, 0,0x204,, ahk_exe utorrent.exe ahk_class µTorrent ; Right Click down 
PostMessage, 0x8001, 0,0x205,, ahk_exe utorrent.exe ahk_class µTorrent ; Right Click Up 
+0

我爲自己的答案刪除了標記,並選擇了您的標記,因爲我不喜歡回答自己的問題。將測試您的簡化建議並回報。謝謝。 – Sabuncu

1

當你右鍵點擊某物時,會顯示上下文菜單。上下文菜單也可以通過按下鍵盤上的應用程序按鍵來顯示。當你按下它時,Windows嚮應用程序發送一條消息,即WM_APP消息。大多數應用程序通過顯示上下文菜單來響應在托盤圖標的情況下,響應與對右鍵單擊的響應相同。

+0

謝謝。我通過將PostMessage更改爲僅發送WM_APP(不是+1),並刪除鼠標上/下參數來測試您的答覆,但應用程序未響應顯示上下文菜單。 – Sabuncu

0

似乎WM_APP + 1消息號是在應用程序的開發中做出的選擇,在這種情況下是utorrent。可能是另一個消息#,沒有什麼魔力。我相信我提交的代碼(來自AHK論壇)通過逆向工程發現了要發送的消息。