用戶已經find_window定義的方法只允許您通過窗口
用戶定義它是通過兩個參數class_name
和window_name
通過,不變的方式的類名來選擇,以win32gui.FindWindow
(它只是調用Win32 API函數FindWindow
)。所以,只要做到這一點:
windowmgr.find_window(None, 'My Window Name')
但是,即使這是不正確的,你不需要使用他find_window
功能;它應該是很明顯如何調用win32gui.FindWindow
自己:
hwnd = win32gui.FindWindow(None, 'My Window Name')
如果你想在FindWindow
/EnumWindows
/等的一個很好的解釋。語法,你嘗試看看他們的文檔嗎?你有什麼不明白的地方嗎?
同時:
...的窗口,我不知道也沒能因爲它找到的類名僅僅是在Java中運行
什麼區別遊戲它是否使它在Java中運行?您可以枚舉窗口並打印出他們的類名,無論它們是用C++,Java,.NET,Python還是其他語言編寫的。或者使用Visual Studio/VS Express附帶的工具之一,或者可以在網絡上找到的任何免費改進版本,如MS Spy++,它可以讓你指向一個窗口並給你標題和類名稱。
我不想枚舉窗口找到它,因爲我不知道如何工作。
用正則表達式調用windowmgr.find_window_wildcard(wildcard)
,它會枚舉窗口並將它們的標題與該正則表達式進行比較。
如果你想編寫自己的代碼來做到這一點,只寫這樣的功能:
def my_callback(hwnd, cookie):
現在,當你這樣做:
win32gui.EnumWindows(my_callback, some_cookie)
...它會打電話給你my_callback
功能每個窗口一次,其中hwnd
是窗口(您可以將其傳遞給win32gui
功能,例如GetWindowText
),而cookie
與您通過的some_cookie
值相同。(如果您不知道編輯傳入的任何東西,只要通過None
,並且不要對回調函數中的值做任何事情。但是你可以看到其他的回答者如何用它來通過正則表達式)
同時:使用find_window_wildcard
因爲它寫的腳本
已設法將窗口到前臺幾次,但只有當窗口已經打開時,它纔會間歇性地工作。
首先,如果窗口不存在,則不能將窗口置於前景。你期望如何工作?
就間歇性工作而言,我的猜測是有很多窗口與您的通配符匹配,並且程序會隨意挑選其中一個。它可能不是你想要的。 (它甚至可能是一個隱藏的窗口或什麼,所以你不會看到任何事情發生。)
無論如何,你不需要使用find_window_wildcard
;如果你知道確切的名字,那就使用它。當然,它可能並不是唯一的(無論遊戲的名字是什麼,沒有任何東西阻止你打開電子郵件或具有相同標題的記事本窗口......順便說一下,這就是爲什麼你想要首先嚐試類名的原因),但至少它比一些不明確的通配符更可能是唯一的。
那麼,如果類名稱不是唯一的(或者更糟糕的話,它是一個特殊的「數字」類,比如一般對話窗口的#32770),而且窗口名也不是這樣?您可以通過查看擁有的進程或模塊(exe/dll)或父窗口或其他任何東西來縮小範圍。您必須仔細查看win32gui
和/或MSDN文檔(以上鍊接)以瞭解可能的嘗試方法,並通過試驗和錯誤(記住間諜工具)進行遊戲,直到找到某種方式來指定唯一的窗口。然後編碼。
如果你不知道如何訪問你想要的特定窗口,你應該枚舉窗口並嘗試找到你正在尋找的窗口的名稱。 – thkang 2013-03-14 23:48:50