私はGoogleとMicrosoftのフックのドキュメントを検索していますが、フックを作る方法はたくさんありますが、私はすでにその方法を知っています。メッセージを受信するために、フック(この場合はキーボードフック)をキューに入れるにはどうすればよいですか?他のキーフックが入力を変更するのを防ぐために、可能な限りハードウェア入力に近づけるようにしています。 I.E:App1は、KBDLLHOOKのフラグをスプーフィングして注入しないようにするためのキーフックを実行します。 LLKHF_INJECTEDからフラグを変更する前に、そのメッセージにどうやって行くのですか?私のWindowsHookを他の人の手前で処理する
TL; DRキーインジェクションを防ぐために私のフックが別のメッセージの前にどのようにメッセージを受け取るのですか?私は、メッセージキューは、最後に一次に行く承知していますが、どういうわけか、私は前に私のプログラムを関係なく起動した場合やApp1の後に、それはまだ取得します。私は
LRESULT CALLBACK keybdProc(int n, WPARAM w, LPARAM l)
{
KBDLLHOOKSTRUCT *kbdll = (KBDLLHOOKSTRUCT*)l;
if (w == WM_KEYDOWN)
{
switch (kbdll->flags)
{
case LLKHF_INJECTED:
printf("%d/%c is an Injected Key Press (Reject)\n", kbdll->vkCode, char(kbdll->vkCode));
break;
default:
printf("%d/%c Not injected (Continue)\n", kbdll->vkCode, char(kbdll->vkCode));
break;
}
}
return 0; //CallNextHookEx(NULL, n, w, l);
}
int main()
{
HHOOK keybdHk = SetWindowsHookEx(WH_KEYBOARD_LL, keybdProc, GetModuleHandle(NULL), 0);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(keybdHk);
return 0;
}
編集をテストするために使用しています
簡単なコード私のKeyhookの前に入力し、NextHookを呼び出さない(私のフックは決してそれを取得しない)か、それを偽装する。
思考実験:まず自分自身を置く方法があるとします。他のフックプログラム*もそうしないでしょうか? – Blorgbeard
はい、私の計画はそれ自体が最初に置かれた後です。それがx分ごとにリフレッシュされたら、x-1分前にリフレッシュします。何らかの「武器競争」状況を作り出す。 @Blorgbeard – Exsanity
ドキュメントでは、 'WH_KEYBOARD'フックは' WH_KEYBOARD_LL'の前に実行されることに言及しています。あなたが本当に最初になりたいなら、何もドライバーを打ち負かすことはありませんが、それはおそらくトップにあるでしょう。文書化されていない土地に入ると、メモリが使えば、後に登録された(低レベルの)キーボードフックが後に実行されるのを見たことがあります。 – chris