掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
仮想キーコードの送信方法 (ID:49840)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Keybd_event 関数は物理的なキー操作をエミュレートします.一方, PostMessage(Memo1.Handle, WM_KEYDOWN, VK_Shift, 0); PostMessage(Memo1.Handle, WM_KeyDown, VK_LEFT, 0); というコードは単に,指定したウィンドウにキーコードを送信しているだけです. つまり, >エンターキーは送信されません。 ということはありません. Enter キーの操作としては動作しませんが,VK_RETURN というコードは 間違いなく送信されています.よく確認してください. 「送信」と「機能の実行」とは全く意味が違います. [Shift] + [←] というキー操作を送信したいのであれば. WM_KEYDOWN, WM_KEYUP の lParam 引数の値を設定することはもちろんですが, [←] キーを押下した時に [Shift] キーも押下しているというという情報を キーバッファに書き込みます. 自分でコーディングしなくても Torry's DelphiCenter にコードがあります. 昔のコードですが十分使えます. [...simulate the pressing of keyboard keys?] https://www.swissdelphicenter.ch/en/showcode.php?id=220 そのコードにある PostKeyExHWND という関数を使用すると,例えば以下のように書けます. (動作確認は Windows 7 U64(SP1) + Delphi xE5(UP2) Pro VCL-32) procedure TForm1.SpeedButton1Click(Sender: TObject); begin PostKeyExHWND(Memo1.Handle, VK_RETURN, [], False); end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin PostKeyExHWND(Memo1.Handle, VK_LEFT, [ssShift], False); end; ※ 一般的に,[Shift] キー等が押下されているかは TKeyboardState あるいは ※ GetKeyState 関数等でキーバッファの情報を調べます. ※ WM_KEYDOWN, WM_KEYUP を SendMessage で送信すると不具合が発生することがあります.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.