この質問は次のようなものです。Microsoft Word (Office 2013) が画面のペイントを使用している API は、未回答のままです。
Office プラグイン (ネイティブ C++) を持っていますが、これは Office にかなり関係しています。フックの使用 Office アプリケーションのクライアント領域を変更しています。
Office 2010までは、WM_NCPAINTをフックし、OfficeウィンドウでGDIメソッドを使用して、うまく機能していました。
ただし、Office 2013 は Direct2D、DXGI、および DirectWrite を使用します。Windows 7 では、画面に何かを描画すると、次にカーソルが点滅したときに消去されます。Windows 8 では、画面にアクセスすることさえできません。
現在、私の考えはフックすることID2D1DeviceContext::BeginDraw
ですID2D1DeviceContext::EndDraw
-そして最後の関数で、実際の関数に委譲する直前に、自分のものを追加します。別のアイデアはフックIDXGISwapChain1::Present1
です。上記の何が起こっているのかを特定するのに苦労したこれらの両方の方法の問題。
私は、装飾したいクライアント領域の上に別のプロセス (または可能であれば GDI ベースのウィンドウ) を考えています。実際のイーストステートの大部分は 100% 透明です。このソリューションの問題点は、キーボード フォーカスやマウス クリックなどの問題です。
ヒントや提案をいただければ幸いです。どのツール (DirectX 用の Spy++) も高く評価されます。DirectX (具体的には Direct2D) は、拡張可能またはプラグ可能なストーリーを文書化していますが、私は知りませんが、使用できますか? カーネル モードで不足しているものはありますか?