[ 仮想キーコードの送信方法 ]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201907/19070005.txt
>エンターキーは送信されません。
キーコードは送信されています.
Enter キーの押下としては機能していないだけです.
以下で確認できます.
//=============================================================================
// SendMessage でキーコードを送る
//=============================================================================
procedure TReceivForm.Button1Click(Sender: TObject);
begin
Memo1.Clear;
SendMessage(Memo1.Handle, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(Memo1.Handle, WM_KEYUP, VK_RETURN, 0);
SendMessage(Memo1.Handle, WM_KEYDOWN, VK_Shift, 0);
SendMessage(Memo1.Handle, WM_KeyDown, VK_LEFT, 0);
SendMessage(Memo1.Handle, WM_KEYUP, VK_LEFT, 0);
SendMessage(Memo1.Handle, WM_KEYUP, VK_Shift, 0);
end;
//=============================================================================
// PostMessage でキーコードを送る
// PostMessage はメッセージキューにポストする
// この場合はキーの情報をポストする
//=============================================================================
procedure TReceivForm.Button2Click(Sender: TObject);
begin
Memo1.Clear;
PostMessage(Memo1.Handle, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(Memo1.Handle, WM_KEYUP, VK_RETURN, 0);
PostMessage(Memo1.Handle, WM_KEYDOWN, VK_Shift, 0);
PostMessage(Memo1.Handle, WM_KeyDown, VK_LEFT, 0);
PostMessage(Memo1.Handle, WM_KEYUP, VK_LEFT, 0);
PostMessage(Memo1.Handle, WM_KEYUP, VK_Shift, 0);
end;
//=============================================================================
// Memo1 の OnKeyDown イベント処理
//=============================================================================
procedure TReceivForm.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('OnKeyDown $' + IntToHex(Key, 4));
end;
//=============================================================================
// Memo1 の OnKeyup イベント処理
//=============================================================================
procedure TReceivForm.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('OnKeyUp $' + IntToHex(Key, 4));
end;
//=============================================================================
// ApplicationEvents1 の OnMessage イベント処理
// WM_KEYDOWN, WM_KEYUP 等はメッセージキューにポストされた値を取得する
// メッセージキューにポストするには PostMessage を使用する
// SendMessage はメッセージキューにはポストしない
//=============================================================================
procedure TReceivForm.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
Ltext : string;
begin
if Msg.hwnd = Memo1.Handle then begin
if Msg.message = WM_KEYDOWN then begin
Ltext := 'WM_KEYDON $'
+ IntToHex(Msg.wParam, 4)
+ ' $' + IntToHex(Msg.lParam, 4);;
Memo1.Lines.Add(Ltext);
end else
if Msg.message = WM_KEYUP then begin
Ltext := 'WM_KEYUP $'
+ IntToHex(Msg.wParam, 4)
+ ' $' + IntToHex(Msg.lParam, 4);;
Memo1.Lines.Add(Ltext);
end;
end;
end;
|