キーストロークを監視する WH_KEYBOARD_LL フックを設定しましたが、コードはしばらくの間正常に動作しますが、アプリケーションが単一のエラーを発生させずに突然停止します。
デバッグを開始すると、関数にブレークポイントがある間、動作が早く表示されました。キーボードイベントの受信を停止するまで、関数は約6回呼び出されるようです。
function hookproc(code: Integer; wparam: WPARAM;lparam: LPARAM): LRESULT; stdcall;
begin
result := CallNextHookEx(hook, code, wParam, lParam); // I have put breakpoint here
end;
procedure Start();
begin
hook := SetWindowsHookEx(WH_KEYBOARD_LL,@hookproc,GetModuleHandle(nil),0);
end;
procedure TMyApplication.DoRun;
var
msg : tagMSG;
begin
Start();
ZeroMemory(@msg,sizeof(msg));
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
基本的に、コードをこれに減らしましたが、動作はまだ存在します。コードの何が問題なのですか?