1

このC#コードをctypesを使用してPythonに変換する際に問題が発生しました。このコードは、Windows 7StartOrbを非表示にするためのものです。これがリンクです。

[DllImport("user32.dll")]
private static extern IntPtr FindWindowEx(
       IntPtr parentHwnd,
       IntPtr childAfterHwnd,
       IntPtr className,
       string windowText);

IntPtr hwndOrb = FindWindowEx(IntPtr.Zero, IntPtr.Zero, (IntPtr)0xC017, null);

定義する必要がありますか

FindWindow = ctypes.windll.user32.FindWindowEx
FindWindow.restype = wintypes.HWND
FindWindow.argtypes = [
    wintypes.HWND, ##hWnd
    wintypes.HWND, ##hWnd
]

それとも直接使用しますか?申し訳ありませんが、Pythonctypesの使用は初めてです。

hWnd = win32gui.FindWindowEx (win32gui.GetDesktopWindow(),
None,0xC017 ,None)
4

1 に答える 1

2

表示されているエラーメッセージがあると便利です。ただし、これはほぼ確実に、ストレートのFindWindowExではなく使用する必要があるためですuser32.FindWindowExW(またはuser32.FindWindowExA、ASCII、非Unicodeバージョンが本当に必要な場合)。また、4つのパラメーターすべてにargtypesを指定する必要があります。

これがドキュメントからのプロトタイプです:

HWND WINAPI FindWindowEx(
  _In_opt_  HWND hwndParent,
  _In_opt_  HWND hwndChildAfter,
  _In_opt_  LPCTSTR lpszClass,
  _In_opt_  LPCTSTR lpszWindow
);

では、これはどうですか?

FindWindowEx = ctypes.windll.user32.FindWindowExW
FindWindowEx.argtypes = [
    wintypes.HWND,
    wintypes.HWND,
    wintypes.LPCWSTR,
    wintypes.LPCWSTR,
]
FindWindowEx.restype = wintypes.HWND

リンクしたC#コードに従って、(FindWindowExではなく)FindWindowを実行することもできます。

>>> FindWindow = ctypes.windll.user32.FindWindowW
>>> FindWindow.argtypes = [wintypes.LPCWSTR, wintypes.LPCWSTR]
>>> FindWindow.restype = wintypes.HWND
>>> FindWindow('Shell_TrayWnd', '')
65670L
于 2012-11-09T04:01:29.610 に答える