掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
グローバルフックをVK_CANCELで終了させたいのですが (ID:48753)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>どこかのサイトの記事やサンプルを参考にした時は,その URL を示すといいのです. すみません、参考にしたのは次の部分です。 ぴったりのがなくてつぎはぎしましたけど... http://mrxray.on.coocan.jp/Delphi/plSamples/260_HookKeyMouseEvent.htmの リスト1 DLL を使用しないマウスとキーのグローバルフック リスト6 低レベルのマウスフック WH_MOUSE_LL とキーフック WH_KEYBORD_LL を使用したコード コンパイルは通ったんですが、Ctrl+ScrollLockまたはCtrl+Pauseでフックを終了できません。 次のようにShowMessageで値を表示したところ、VK_CANCELの値(仮想キーコードの値)3とは異なります) 調べてみるとIParではなくwParが仮想キーコードの値を格納しているようですが、どのようにしてVK_CANCELと比較すればいいのでしょうか? //----------------------------------------------------------------------------- // キーフックのコールバック関数 //----------------------------------------------------------------------------- function LowLevelKeyProc(nCode: Integer; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall; var Lkbdll : PKBDLLHOOKSTRUCT; LScanCode : Integer; pEvent: pEVENTMSG; begin if nCode < 0 then begin Result := CallNextHookEx(KeyHookHandle, nCode, wPar, lPar); exit; end; if nCode = HC_ACTION then begin pEvent := pEVENTMSG(wPar);//ここをIParからwParに変えただけでは次のエラーが出る ShowMessage(IntToStr(Lo(pEvent.paramL)));//ここでaccess violation at 0x005c6365 if (wPar=WM_KEYDOWN) and (Lo(pEvent.paramL)=VK_CANCEL) then begin UnhookWindowsHookEx(KeyHookHandle); Form1.Caption := 'No Hook!'; KeyHookHandle := 0; end; end; Result := CallNextHookEx(KeyHookHandle, nCode, wPar, lPar); end; //--------------------------- >それとですね.コールバック関数内で受けたメッセージに対して処理をする場合, できる限り,コールバック関数内ではなく,呼び出し側のスレッド (新規に作成したプロジェクトの場合は Form1) に PostMesssage して,そこで処理するようにした方がいいです. そうしないと思わぬ結果になることがあります. ごめんなさい、どのように変えればいいのでしょうか?
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.