1

API フック メカニズムを実装しようとしています。

私がこれまでに持っているのは、SetWindowsHookEx呼び出しを介して他のプロセスに挿入された DLL と、フック自体を実装するためのコードです。

たとえば、MessageBoxA複数の異なるアプリケーション間で呼び出しを正常にフックできます (これは最終目標ではありません)。

私がする必要があるのは、いくつかのグラフィック関数、特にスクレイプをスクリーンできるようにする必要があるテキストアウト関数をフックすることです。

今-私は必要なテキストアウト関数(TextOutA/WExtTextOutA/Wアクセスしようとしているアプリケーション用)を認識しており、をウィンドウハンドルにフックBegin/EndPaintまたはGet/ReleaseDC一致させ、テキストアウトがDC気になる窓。

私の問題は、テキストアウト関数、メッセージボックスなどを問題なくフックできる一方GetDCで、ハードクラッシュが発生することBeginPaintです.

コードはかなり長いので、私が問題を抱えているものを投稿しますが、役に立ったらもっと投稿できます。

大まかなフレームワークは次のとおりです。

function CustomBeginPaint(hWnd: HWND; var lpPaint: TPaintStruct): HDC;
begin
  UninstallHook();

  Result := BeginPaint(hWnd, lpPaint );

  InstallHook();
end;

この非常に単純な関数でさえ、常に失敗し、ゼロを返します。

hWnd複数のマシンでこれを試しても常に 1309192であるため、何が起こっているのかを説明するのは完全に途方に暮れています。

4

1 に答える 1