这个问题与:which API Microsoft Word (Office 2013) is using the paint the screen 相关,没有得到回答。
我有一个与 Office 相当相关的 Office 插件(本机 C++)。使用挂钩我正在修改 Office 应用程序的客户区。
直到 Office 2010、连接 WM_NCPAINT 和在 Office Window 上使用 GDI 方法,一切对我来说都很好。
但 Office 2013 使用 Direct2D、DXGI 和 DirectWrite。在 Windows 7 上,如果我在屏幕上画了一些东西 - 它会在下次光标闪烁时被删除。在 Windows 8 上 - 我什至无法访问屏幕。
目前,我的想法是挂钩ID2D1DeviceContext::BeginDraw
, ID2D1DeviceContext::EndDraw
- 在最后一个函数上,就在委托给真正的函数之前,我会添加我的东西。另一个想法是钩子IDXGISwapChain1::Present1
。这两种方法都有问题,我很难确定上面发生了什么。
我什至在想在我想要装饰的客户区顶部使用不同的流程(或基于 GDI 的窗口 - 如果可能的话),大部分真正的东区都是 100% 透明的。此解决方案的问题是键盘焦点和鼠标单击等问题。
任何提示或建议将不胜感激。任何工具(DirectX 的 Spy++)都会受到赞赏。DirectX(特别是 Direct2D)是否记录了可扩展或可插入的故事,我不知道并且可以使用?我缺少内核模式中的任何内容吗?