我最近一直在使用python的win32com.client作为Windows应用程序的API,但正在努力了解一些基本知识。
我一直通过以下方式将其用于名为WEAP的程序中
import win32com.client
win32com.client.Dispatch("WEAP.WEAPApplication")
现在,我想将其与Excel一起使用,并找到了前几行的替代方法,其中之一如下
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
有谁知道使用之间的区别
win32.Dispatch
和
win32.gencache.EnsureDispatch
和其他选择?有谁知道每个人的利弊?或有关何时应使用一个或另一个的一些建议?
但是,他们通常专注于回答特定问题,而不是描述Dispatch,gencache.EnsureDispatch以及其他替代方案(我想要的)之间更大的区别。
任何建议将不胜感激。
您需要阅读的一件事是此链接。
我会尽力回答您的问题,但我不是专家。
COM
使用python创建对象时,python如何知道该对象可用的方法和参数?这与 早期 和 晚期 绑定的概念有关。
如果尝试创建一个COM
以前从未使用过的对象Dispatch
,则不会知道该对象有什么可用的对象。如果我在Jupyter QtConsole中进行操作:
import win32com.client as win32
xl_dis = win32.Dispatch("Excel.Application")
xl_dis
Out[3]: <COMObject Excel.Application>
然后尝试xl_dis.
看看以后我能做什么,我别无选择。我在 后期绑定 的情况下,“ python不知道对象可以做什么”。
如果我做同样的事情EnsureDispatch
:
import win32com.client as win32
xl_ens = win32.gencache.EnsureDispatch("Excel.Application")
xl_ens
Out[3]: <win32com.gen_py.Microsoft Excel 14.0 Object Library._Application instance at 0x35671240>
首先,您可以看到输出的差异,然后,如果我这样做,xl_ens.
我将获得一些可用的方法和参数。我现在处于 早期绑定中 ,“
python知道对象可以做什么”。
发生的结果是EnsureDispatch
强制首先运行makepy.py
(在您的folder中查看Lib\site- packages\win32com\client
)以创建一个Lib\site- packages\win32com\gen_py
包含python脚本的文件夹,其中包含与此COM
对象相关的一些方法和参数。
现在,如果您在使用的新控制台中再次尝试Dispatch
,您将获得完全相同的结果。实际上,在使用之后EnsureDispatch
,in中之前创建的文件夹win32com\gen_py
仍然存在,并且“
python仍然知道对象可以做什么”。要自己进行实验,请转到您的文件夹\win32com\gen_py
并删除包含excel信息的文件夹(对我来说,名称是00020813-0000-0000-C000-000000000046x0x1x7
,不确定与您的名称是否相同)。
最后,两者之间的主要区别是第一次创建COM
对象时是否强制早期绑定,但是如果与COM
对象相关的文件夹已经存在\win32com\gen_py
,则没有太大区别。
我给的链接的这两句话:
要强制使用早期绑定来访问COM对象,必须在代码中强制执行MakePy进程。确保存在MakePy支持后,照常使用win32com.client.Dispatch()。它总是为您的COM对象返回MakePy支持的包装器。
为了强制执行MakePy进程,使用了win32com.client.gencache模块。该模块包含管理MakePy生成的源文件目录的代码:生成的缓存或gencache。此模块中有许多有用的功能,如果需要对这些生成的文件进行高级管理,建议您浏览源文件。
总结一下。
另一种选择是使用dynamic
诸如win32.dynamic.Dispatch("Excel.Application")
和这样,您将始终COM
在后期绑定中获得对象。
问题内容: 假设我有一个要模拟特定x,y坐标处的鼠标单击的窗口。我已经有了hwnd,但不确定如何构造lParam。我过去曾使用过SendMessage来单击按钮等,但是我知道他们的名字。任何帮助将不胜感激。我也忍不住想知道我是否正在以正确的方式进行操作。我的最终目标是在Skype主窗口上单击某个用户(例如)。我使用EnumChildWindows查找主窗口的所有子级,但找不到正确的子级。所以想通了
问题内容: 我不知道使用一个相对于另一个有什么优点和缺点。这个问题源自我在这里得到的建议:根据记录的实际大小为数据库查询动态分配缓冲区。 我正在寻找重要差异的列表(而不是详尽的列表),这将有助于我做出有根据的决策。我有win32 :: odbc的工作经验,可以对此进行真正的证明。如果有人可以在“书面”详细信息的基础上分享他/她的经验,那将非常有帮助。 附加信息:Win32 :: ODBC的作者在此
Win32-OpenSSH 是微软官方提供的 OpenSSH for Windows,是 OpenSSH 的 Win32 移植。
pthreads-win32是windows下的pthread库,和linux下一模一样
问题内容: 我正在弄乱node.js,发现了两种读取文件并通过有线方式发送文件的方法,一旦我确定它存在并使用writeHead发送正确的MIME类型: 如果所讨论的文件很大,例如视频,fs.createReadStream可能会提供更好的用户体验,我是否正确?感觉好像不那么块状。这是真的?我还需要了解其他优点,缺点,警告或陷阱吗? 问题答案: 如果您只是将“数据”连接到“ write()”,将“关
本文向大家介绍Win32 API WM_COMMAND,包括了Win32 API WM_COMMAND的使用技巧和注意事项,需要的朋友参考一下 示例 在以下情况下发送到窗口过程: 用户从菜单中选择一个项目 控件向其父窗口发送通知 加速器按键翻译 讯息来源 HIWORD(wp) LOWORD(wp) lp 菜单 0 菜单ID(IDM_ *) 0 加速器 1 加速ID(IDM_ *) 0 控制 通知码