以下のようなプログラムを起動後直ちにメモ帳の入力欄にフォーカスを与えます。
begin
Application.Initialize;
sleep(10000);
Beep(600,200);
Beep(800,200);
keybd_event(Ord('A'), 0 , 0, 0 );
end.
キーを下げる指示しかしていないのに連続入力されません。
下げたままにするにはどうしたらよいのでしょうか。
よろしくお願いします。
keybd_event(Ord('A'), 0 , 0, 0 );
sleep(2000);
if GetKeyState(Ord('A')) <> 0 then beep(800,500);
としてみると確かに押されていますね。
キーボードの例えば「A」ボタンを物理的に下げるのと同じ結果を得る方法はありませんか。
メモ帳を例にしましたが汎用的な方法でお願いします。
age(ッえ?
編集 削除ごめw
キーボードの押しっぱなしは
up,downの連続メッセージです。down状態の保持ではありません。
キーボードを仮想的におすにはkeybd_eventですが、
本当に押すのと同じ効果を出すには、キーボードドライバを書くしかありません。しかし、仮想キーを弾くアプリケーションはオンラインゲーム等、極めて特殊なソフト位です。
キーボード押しっぱなしは
keybd_event(ORD('A'), 0, 0, 0);
keybd_event(ORD('A'), 0, 1 , 0);
で出来ないですか?
先程の補足です。
キーが押されっぱなしですから
While true Do begin
keybd_event(ORD('A'), 0, 0, 0);
keybd_event(ORD('A'), 0, 1 , 0);
//Break 条件を記入
end;
でOKだと思います。
これで必要十分?
(EX)… KeyRepeat(VK_RIGHT);
var
KeyUpFlag: Boolean;
procedure KeyRepeat(vkey: WORD);
begin
while not KeyUpFlag and not Application.Terminated do begin
keybd_event(vkey, 0, 0, 0);
Application.ProcessMessages; Sleep(50);
end;
end;