2014-02-11 164 views
0

環境:我在Windows 7 64位上使用Python 2.7(32位)。我正在使用win32 API來創建一個Windows自動化工具(我知道有一些存在,但我自己做)。單擊系統托盤圖標Python Win32

問題:我卡在窗戶系統托盤(通知區域),我可以訪問工具欄和我能夠用TB_GETBUTTON來獲取工具欄按鈕的信息,但我有遇到以下兩種情況:

1)如何在通知托盤中左/右點擊圖標?有沒有辦法通過發送消息到工具欄手柄或我需要獲得位置併發送點擊。如果是最後一種情況,我如何才能確定圖標相對於屏幕的確切位置? (GetRect無助於返回top = 0,left = 2與屏幕不相關)。

2)如何訪問通知中的隱藏圖標,我可以點擊按鈕彈出菜單,但我不知道如何訪問圖標/按鈕,如「右鍵單擊」圖標並提出他們的上下文菜單並通過它。

任何幫助,非常感謝。謝謝!

+0

沒有支持的機制來做到這一點。您可能可以使用'TB_GETBUTTON',這是實現細節。沒有系統爲此提供支持。如果你想看到隱藏的按鈕,可以點擊''''按鈕。但不要指望這裏的系統有任何支持。它不希望你這樣做。 –

+0

@DavidHeffernan謝謝你的回覆!我究竟能做什麼,不能做什麼?你能更具體地說明什麼是可能的,什麼不可以,因爲我的問題不止一個部分。 – TheCodingGent

+0

通過支持的API都不可能。這都是黑客。你可以管理的最好的辦法是僞造輸入。 –

回答

0

經過我的研究,沒有辦法將點擊消息發送到系統托盤圖標,至少不會通過我嘗試過的任何API。執行此操作的最佳方法是,我遵循以下方式:

  1. 您將消息TB_GETBUTTON發送到工具欄。
  2. 這將爲您檢索您檢索的按鈕的「idCommand」,以便您可以使用循環獲取所有在「TBBUTTON」結構中找到的「idCommand」。
  3. 使用idComman,您可以使用工具欄手柄將消息發送到工具欄按鈕,以獲取帶有TB_RECT消息的圖標尺寸。
  4. 一旦你知道你只需要拿到這是簡單的工具欄的尺寸,因爲它只是一個窗口的按鈕的尺寸,你做一個CAL GetWindowRect
  5. 最後一步,現在你要發送的點擊你做調用win32api.mouse_event,其中x爲:工具欄的左邊界+圖標寬度的一半,y爲:工具欄的上邊界+圖標高度的一半。 (所以你發送點擊中心)。