【Win】感觉“ctypes.WinDLL(“user32“)“跟“ctypes.windll.user32“看起 ...

打印 上一主题 下一主题

主题 969|帖子 969|积分 2907

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Gemini-2.0-Flash-Experimental

好的,我来用更适合你的方式表明一下 ctypes.WinDLL("user32") 和 ctypes.windll.user32 之间的区别,尤其是在 Windows 情况下:
核心概念:动态链接库(DLL)
在 Windows 系统中,很多功能(例如窗口管理、用户输入等)都封装在名为动态链接库(Dynamic Link Library,简称 DLL)的文件中。user32.dll 就是一个很告急的 DLL,它包罗了很多与用户界面相关的函数。
ctypes 模块的作用:
Python 的 ctypes 模块答应你直接调用这些 DLL 中的函数,就像调用 Python 函数一样。这使得 Python 步伐可以使用 Windows 系统提供的底层功能。
ctypes.windll.user32:


  • ctypes.windll: 这部分表示你想要加载一个使用标准 Windows 调用约定的 DLL。这种约定是 Windows 系统默认的,叫做 stdcall。
  • user32: 这部分是 user32.dll 的名字,ctypes 会根据这个名字找到对应的 DLL 文件并加载。
  • 问题: ctypes.windll.user32 是一个共享的对象,在整个 Python 步伐中是唯一的。如果一个库(例如 pynput)修改了这个对象中函数的范例界说,会影响到所有使用 ctypes.windll.user32 的代码。
ctypes.WinDLL("user32"):


  • ctypes.WinDLL("user32"): 这部分表示你想要加载 user32.dll,但不是通过共享的方式。每次调用这个,它会创建一个新的 user32.dll 实例。
  • 优势: 这会创建一个独立的 user32.dll 实例,这意味着如果你修改了此实例中函数的范例界说,不会影响到其他地方。
用生活中的例子来比喻:
假设你和你的朋侪合用一个公共的图书馆(ctypes.windll.user32),这个图书馆里的书(DLL中的函数)都是共享的。如果你在书上做了标志(修改了范例界说),那么你的朋侪看到这本书时,也会看到你的标志。
而 ctypes.WinDLL("user32") 就像是你本身有一个专属的图书馆,内里的书(DLL中的函数)是独立的。你在本身的书上做什么标志,都不会影响到别人的书。
总结:
特性ctypes.windll.user32ctypes.WinDLL("user32")实例共享实例独立实例修改影响修改会影响所有地方修改只影响当前实例实用场景常规调用 Windows API避免范例辩说,需要独立控制 对于你来说:


  • 如果你只是简单地使用 ctypes 调用 Windows API,通常用 ctypes.windll.user32 就够了。
  • 但是如果你需要使用 pynput 这样的库,它可能会修改 user32.dll 的范例界说,为了避免辩说,你应该使用 ctypes.WinDLL("user32") 创建一个独立的 user32.dll 实例。
希望这个表明能资助你理解它们之间的区别!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表