You need to enable JavaScript to run this app. IE10环境下基于纯C开发PyHook鼠标监听调用IShellWindows出现延迟问题求助
优惠活动
大模型
产品
解决方案
定价
更多

IE10环境下基于纯C开发PyHook鼠标监听调用IShellWindows出现延迟问题求助

适配UI元素拾取的Pyhook鼠标监听器开发问题

项目开发目标

  • 基于Pyhook库,使用纯C与Python混合开发全局鼠标事件监听器,核心需求是获取用户点击对应的UI元素相关信息
  • 目前已通过UI Automation接口实现常规桌面控件的信息读取,但该接口无法获取网页内部的元素信息,因此计划针对IE浏览器做特殊适配:先校验当前鼠标所在窗口是否为Internet Explorer,若能成功获取对应IE实例对象,即可在DOM层创建监听器实现网页内元素的拾取

核心异常表现

  • 鼠标在IE窗口(尤其是网页内容区域)移动时存在明显延迟,卡顿感显著
  • 初步排查怀疑卡顿来源为pShellWindows接口创建环节,猜测是否因多次重复调用CoCreateInstance造成性能损耗
  • 后续进一步定位发现问题和pShellWindows对象的释放环节相关,怀疑低层级鼠标事件触发频率过高,系统来不及完成对应资源的释放,需要额外增加延迟做缓冲处理
  • 额外怀疑Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS宏的实现逻辑干扰了IShellWindows接口的正常调用,多次尝试调试都未达成目标

附简化后核心逻辑代码

LRESULT CALLBACK cLLMouseCallback(int code, WPARAM wParam, LPARAM lParam){

...

IUIAutomation *pAutomation = NULL;
IUIAutomationElement *element = NULL;

CoInitialize(NULL);
...
HRESULT hr = CoCreateInstance(&CLSID_CUIAutomation,NULL,CLSCTX_INPROC_SERVER,&IID_IUIAutomation,(void**)&pAutomation);
...

  if(wcsstr(process_name,IEName)!=NULL){

    IShellWindows *pShellWindows = NULL;
    ...
    HRESULT hr = CoCreateInstance(&CLSID_ShellWindows,NULL,CLSCTX_ALL,&IDD_IShellWindows, (void**)&pShellWindows);
    ...
    IUnknown_Release(pShellWindows);
  }

...

CoUninitialize();

} 

int cSetHook(int idHook, PyObject *pyfunc){

HINSTANCE hMod;

if(idHook > WH_MAX || idHook < WH_MIN){
  pyErr_SetString(PyExc_ValueError, "Hooking error: invalid hook ID";
}

Py_BEGIN_ALLOW_THREADS
hMod = GetModuleHandle(NULL);
if(NULL==hMod)
  hMod = GetModuleHandle("_cpyHook.pyd");
Py_END_ALLOW_THREADS

switch(idHook){
  case WH_MOUSE_LL:
    if(callback_funcs[idHook]!=NULL)
      break;
    callback_funcs[idHook] = pyfunc;
    Py_INCREF(callback_funcs[idHook]);
    
    Py_BEGIN_ALLOW_THREADS
    hHooks[idHook] = setWindowsEx(WH_MOUSE_LL,cLLMouseCallback,(HINSTANCE) hMod,0);
    Py_END_ALLOW_THREADS
    break;
 case WH_KEYBOARD_LL:
  ...
}

if(!hHooks[idHook]){
  PyErr_SetString(PyExc_TypeError, "Could not set hook");
}

return 1;
}

内容的提问来源于stack exchange,提问作者sergioMoreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.12 19:45:03