2017-07-25 69 views
0

試圖使用WIN DLL來操縱打開的窗口。蟒蛇ctypes.WinDLL使用的作品,但沒有結果

import ctypes 
user32 = ctypes.WinDLL ("user32") 
print(user32.FindWindowExA(None,None,None,"FileZilla")) 

它打印0但FileZilla正在運行。 與Native.loadLibrary一起使用Java的相同庫。 Lib似乎已被加載,因爲它在調用FindWindowExA時顯示錯誤的args數量錯誤。

回答

0

該代碼將在32位Python下工作,但不在64位Python下工作。原因是你需要定義參數的類型。在運氣而不是設計中,你在32位程序中不這麼做。

此外,在我看來,將自己侷限於ANSI接口似乎很少有意義。你也可以習慣使用Win32的本地Unicode接口。

所有這一切都導致了這一點:

import ctypes 
from ctypes import wintypes 

user32 = ctypes.WinDLL("user32") 
user32.FindWindowExW.restype = wintypes.HWND 
user32.FindWindowExW.argtypes = [wintypes.HWND, wintypes.HWND, wintypes.LPCWSTR, 
    wintypes.LPCWSTR] 
print(user32.FindWindowExW(None, None, None, "FileZilla")) 
+0

謝謝!這工作。但。首先,我注意到你使用FindWindowExW(它工作)而不是FindWindowExA(不起作用) - 有什麼區別?其次,不工作,假設應該關閉找到的窗口:user32.CloseWindow(user32.FindWindowExW(None,None,None,「FileZilla」)) – user1060667

+0

CloseWindow只能最小化成功。現在找到了DestroyWindow函數,但它沒有效果 – user1060667

+0

我解釋了爲什麼我在答案中使用了W函數。我不打算回答你現在在評論中提出的其他問題。我回答了你問的問題。如果這不能讓你滿意,我很抱歉。 –