ctypes 是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。
在windows下,ctypes提供了windll对象用于载入动态连接库,Windows会自动添加通常的 .dll 文件扩展名.
windll.kernel32
windll.user32
windll.kernel32.GetModuleHandleA
windll.user32.FinWindowA
windll.user32.FinWindowW
Win32系统的动态库,比如 kernel32 和 user32,通常会同时导出同一个函数的 ANSI 版本和 UNICODE 版本。UNICODE 版本通常会在名字最后以 W 结尾,而 ANSI 版本的则以 A 结尾。 win32的 GetModuleHandle 函数会根据一个模块名返回一个 模块句柄,该函数暨同时包含这样的两个版本的原型函数,并通过宏 UNICODE 是否定义,来决定宏 GetModuleHandle 导出的是哪个具体函数。
ctypes 定义了一些和C兼容的基本数据类型
c_ubyte | unsigned char
c_byte | char
ctypes 暴露了 byref() 函数用于通过引用传递参数(就是传递指针),使用 pointer() 函数也能达到同样的效果,只不过 pointer() 需要更多步骤,因为它要先构造一个真实指针对象。所以在 Python 代码本身不需要使用这个指针对象的情况下,使用 byref() 效率更高
GetClientRect(handle, byref(r))