none
グローバルキーボードフックで、フックできないことがあることについて RRS feed

  • 質問

  • VS2013 C++で、グローバルキーボードフックを使ったアプリを作ろうとしています。

    フック用DLL内に、KeyboardProcコールバック関数と、SetWindowsHookExでフックを開始する関数を用意し、メインアプリからフックDLLの関数を呼んでフックを開始しています。

    概ねフックできているのですが、IEのクライアント領域(Webの入力フォームなど)など、特定の場所でフックできないことがあります。

    解決方法をご教授いただけると助かります。

    以上、よろしくお願い致します。
    2013年12月8日 9:50

回答

すべての返信

  • Windows Vistaで導入されたユーザー インターフェイス特権の分離 (UIPI)によるものかと思われます。IEはセキュリティのため低い権限が設定されることがあります。その場合、低い権限のIEプロセスから通常権限を持つフックプロセスに対してメッセージを送ることはUIPIによりブロックされます(というよりその目的でIEは自身の権限を低くしている)。ChangeWindowMessageFilterなどを使うことになるでしょうか。
    • 回答としてマーク type73KT 2013年12月9日 10:29
    2013年12月8日 11:20
  • ご指摘頂いたキーワードを元に調べさせて頂きました。

    考えていた仕様にはハードルが高いことが分かりました。

    大変勉強になりました。

    2013年12月9日 10:32