1

我在使用 ctypes 将此 C# 代码转换为 python 时遇到问题。此代码用于隐藏 Windows 7 启动球。这是链接

[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
]

还是直接使用?抱歉,我是使用 python ctypes 的新手。

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

1 回答 1

2

看到您看到的错误消息会很有帮助。但是,这几乎可以肯定是因为您需要使用user32.FindWindowExW(或者user32.FindWindowExA如果您真的想要 ASCII、非 Unicode 版本)而不是直接使用 FindWindowEx。您还需要为所有四个参数指定 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# 代码执行 FindWindow(而不是 FindWindowEx):

>>> 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 回答