掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
HotKeyを使って右コントロールキー上下でPageUpDownさせたい (ID:36367)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
貴重な情報ありがとうございます。 >キーの同時押し判定にはAsyncでないGetKeyStateを使うのが正しいですね。 これは、何か、情報源があるのでしょうか。 どっちを使うといいとか。古いOS向けとかなんとか,,, > ついでに、keybd_eventはもう古い、NT以降はSendInputを使えということになっているようですが、そちらは試してみたでしょうか? いえ、全然知りませんでした。 ・・・で・・・も! KEYEVENTF_EXTENDEDKEY これを、追加してみたら見事に動きました!! ありがとうございます。 ソースは function GetAsyncKeyState_Delphi(iKey: Integer): Boolean; begin Result := BOOL(Hi(GetAsyncKeyState(iKey))); end; function GetKeyState_Delphi(VKey: Integer): Boolean; begin Result := (GetKeyState( VKey ) and $8000 <> 0) end; procedure TForm12.WMHotKey(var Msg: TWMHotKey); begin case Msg.HotKey of 1: begin if GetKeyState_Delphi(VK_RCONTROL) then begin keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); keybd_event(VK_PRIOR , 0, 0, 0); keybd_event(VK_PRIOR , 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0); end else begin UnregisterHotKey(Self.Handle, 1); keybd_event(VK_UP , 0, 0, 0); keybd_event(VK_UP , 0, KEYEVENTF_KEYUP, 0); SethotKeyToOS(Self.Handle, 1, VK_UP, False, True, False, False); end; end; 2: begin if GetKeyState_Delphi(VK_RCONTROL) then begin keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); keybd_event(VK_NEXT , 0, 0, 0); keybd_event(VK_NEXT , 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0); end else begin UnregisterHotKey(Self.Handle, 2); keybd_event(VK_DOWN , 0, 0, 0); keybd_event(VK_DOWN , 0, KEYEVENTF_KEYUP, 0); SethotKeyToOS(Self.Handle, 2, VK_DOWN, False, True, False, False); end; end; end; end; このようにすると、 左Ctrl+↑↓なら、そのまま、Ctrl+↑↓の機能 右Ctrl+↑↓なら、PgUp PgDn の機能 が実現できました! KEYEVENTF_EXTENDEDKEYは知っていたのですが、うっかりしていましたよ。 ありがとうございます。 GetAsyncKeyState_DelphiとGetKeyState_Delphiは この場合では、どちらも同じ動作をしています。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.