启动 WinEventHook 似乎并不可靠。什么会导致事件挂钩有时仅监视事件(或运行已识别的事件 proc 函数)?
IE。在 IE8 BHO 中
HWINEVENTHOOK eHook = ::SetWinEventHook(EVENT_OBJECT_SHOW, EVENT_OBJECT_REORDER
, 0
, MSAALib_WinEventProc
, GetCurrentProcessId(), GetCurrentThreadId()
, WINEVENT_OUTOFCONTEXT );
我一直在定期收到事件,但是在最近的构建之后它不起作用,除非我也在运行 MS“可访问事件观察器”,停止和启动事件观察器也会停止和启动我的事件 proc 被调用。
我在最近的任何版本中都没有更改 SetWinEventHook,所以我不相信这是原因。所有其他线程/消息泵送操作都按预期进行,因此我不认为无法在线程上泵送消息是原因。
使用http://www.quirksmode.org/dom/events/tests/DOMtree.html测试获取重新排序事件并添加/删除测试元素。
编辑:
经过进一步测试,似乎更改可能是我停止运行“可访问事件观察器”而不是构建。
没有“Accessible event watcher”的事件挂钩捕获的事件范围似乎是 [first, last) 或 eventMin 到 eventMax-1,这与启动“Accessible event watcher”时不符合文档SetWinEventHook的范围不同,并且似乎是 [first,last] 因此使用 EVENT_OBJECT_FOCUS 的 eventMax 似乎可以获得看到 EVENT_OBJECT_REORDER 的预期结果。
我在这里遗漏了什么,或者文档只是错了,事件观察者也在做某事?