2017-07-25 5 views
0

Der Versuch, Win-DLL zu verwenden, um offene Fenster zu manipulieren.Python ctypes.WinDLL Verwendung funktioniert, aber kein Ergebnis

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

Es druckt 0, aber FileZilla läuft jetzt. Die gleiche Bibliothek funktioniert in Java mit Native.loadLibrary. Die Lib scheint geladen zu sein, weil beim Aufruf von FindWindowExA mit einer falschen Anzahl von Argumenten ein Fehler ausgegeben wird.

Antwort

0

Dieser Code wird unter 32-Bit-Python, aber nicht unter 64-Bit-Python funktionieren. Der Grund dafür ist, dass Sie die Typen der Argumente definieren müssen. Sie kommen damit davon, dass Sie das nicht in einem 32-Bit-Prozess tun, sondern eher durch Glück als durch Design.

Außerdem scheint es meiner Meinung nach sehr wenig Sinn zu haben, sich auf die ANSI-Schnittstelle zu beschränken. Sie können sich auch daran gewöhnen, die native Unicode-Schnittstelle zu Win32 zu verwenden.

All das führt dazu:

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

Dank! Das funktioniert. Aber. Zuerst habe ich festgestellt, dass Sie FindWindowExW (das funktioniert) anstelle von FindWindowExA (funktioniert nicht) - was ist der Unterschied? Zweitens, sollte dies nicht funktionieren, sollte das gefundene Fenster geschlossen werden: user32.CloseWindow (user32.FindWindowExW (None, None, None, "FileZilla")) – user1060667

+0

CloseWindow wird nur erfolgreich minimiert. Nun habe ich die DestroyWindow-Funktion gefunden, aber es hat keinen Effekt – user1060667

+0

Ich erklärte, warum ich die W-Funktion in der Antwort verwendet habe. Ich werde nicht versuchen, andere Fragen zu beantworten, die Sie jetzt in Kommentaren stellen. Ich habe die Frage beantwortet, die du gestellt hast. Wenn dich das nicht zufriedenstellt, tut es mir leid. –

Verwandte Themen