私たちのアプリケーションは、Windows の「セキュア キオスク モード」で実行する必要があります。さまざまなアクションをブロックするさまざまな方法があります。私たちが行うことの 1 つは、SetWindowsHookEx を使用してホットキーの使用をリッスンし、WH_GETMESSAGE フックを登録し、WM_HOTKEY メッセージが届いたら、それを WM_NULL に変更することです (以下のコードを参照)。これはほとんどの場合うまく機能しますが、最近問題が発見されました。64 ビット マシンでは、ホットキーをリッスンして応答するアプリケーションが 64 ビット アプリケーションである場合、32 ビット アプリケーションではブロックできません。
私たちはこれを解決する方法を見つけようとしていますが、私が考えることができる唯一のオプションは、バックグラウンドで 64 ビット プロセスを生成して、64 ビット アプリケーションのこのフックを処理することです。他の(より単純な)代替手段はありますか?
フックのセットアップ:
HHOOK getMessageHook = SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc, hInst, 0);
GetMsgProc:
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (nCode)
{
case HC_ACTION:
{
MSG *msg = (MSG *) lParam;
if (msg->message == WM_HOTKEY)
{
// A hotkey was pressed, changed the message to WM_NULL
msg->message = WM_NULL;
}
break;
}
default:
break;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}