0

私は Displayfusion のような小さなツールを作成しています。Windows が move/activate/etc のときにメッセージを受信するためにいくつかのフックが必要ですが、行き詰まっています..

CallWndProc フックにこのプロジェクトを使用しています: http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx

ほぼすべてのウィンドウ (x86 および x64) で問題なく動作しますが、一部のウィンドウではフック DLL を挿入できないようです。現在、Adobe Reader X に問題があります。そのウィンドウからメッセージが受信されていません。サンドボックスと何か関係があると思いますか?誰かが私に正しい方向へのプッシュを与えることができますか?

フックの初期化コード:

bool InitializeCallWndProcHook(int threadID, HWND destination)
{
  if (g_appInstance == NULL)
    return false;

  if (GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC") != NULL)
    SendNotifyMessage((HWND)GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC"), RegisterWindowMessage("WILSON_HOOK_CALLWNDPROC_REPLACED"), 0, 0);

  SetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC", destination);
  hookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProcHookCallback, g_appInstance, threadID);

  return hookCallWndProc != NULL;
}
4

2 に答える 2

0

私のアプリケーションでも同様の問題があります。次のリンクにアクセスしてください。

Windowsフックの奇妙な振る舞い

私の推測では、アプリケーションはCallNextHookExメソッドを呼び出さないことでフィルター関数チェーンを中断します。WH_CBTこれは、フックを使用している場合にのみ可能であることに注意してください。

于 2012-09-25T14:17:58.877 に答える
0

Spy++ がメッセージをキャッチできるか試してみてください。できるのであれば、セキュリティ対策上問題ないことは明らかです。Spy++ はできませんが、ほとんど不可能です。

これが機能するかどうかを確認してください: WH_CALLWNDPROC フックと WH_GETMESSAGE フックの両方を使用してください。前者は送信されたメッセージのみをキャッチし、後者は投稿されたメッセージのみをキャッチするようです。

于 2011-12-13T04:58:41.407 に答える