python包实现接口imessagefilter for com
imessagefilter的Python项目详细描述
python包实现了接口imessagefilter for com。
主要目的是修复Windows COM/COM+客户端中的“应用程序正忙”和“呼叫被被叫方拒绝”错误。
以下是解决方法
https://docs.microsoft.com/en-us/previous-versions/ms228772(v=vs.140)
但是它是由c编写的,这个包提供c和python两个版本。
用法
安装:
pip install imessagefilter
从imessagefilter导入cmessagefilter
在自动化开始时调用静态方法register
在工作结束时调用静态方法revoke
下面是一个示例:
fromcomtypes.clientimportCreateObjectfromimessagefilterimportCMessageFilterdefiter_excel_sheets(filename):CMessageFilter.register()aobj=CreateObject('Excel.Application',dynamic=True)aobj.Workbooks.Open(filename)forsheetinaobj.ActiveWorkbook.Worksheets:print('Processing %s'%sheet.Name)CMessageFilter.revoke()
注意
接口imessagefilter只在单线程中工作 公寓,它不会在多线程中调用 公寓。
参考 https://docs.microsoft.com/en-us/windows/desktop/com/choosing-the-threading-model
构建msgfilter.dll
通过Visual Studio命令行:
cl /LD msgfilter.c ole32.lib
在cygwin中通过mingw32:
i686-pc-mingw32-gcc -shared -o msgfilter.dll msgfilter.c -lole32 -luuid
有两个导出函数,它们可以在任何C文件中使用。
这是一棵枫树:
#include<stdio.h> #include<objbase.h>externvoidregister_message_filter();externvoidrevoke_message_filter();intmain(intargc,char*argv[]){HRESULTret;ret=CoInitializeEx(0,COINIT_APARTMENTTHREADED);register_message_filter();// do something for automation revoke_message_filter();CoUninitialize();return0;}
更改日志
0.2.1
- 先在当前路径中搜索msgfilter.dll
0.1.3
- 修复包信息中的长描述
0.1.2
- 修复输入错误