キーを下げた状態にするには


ペンネイム  2006-07-17 17:33:13  No: 22649  IP: 192.*.*.*

以下のようなプログラムを起動後直ちにメモ帳の入力欄にフォーカスを与えます。

begin

Application.Initialize;

sleep(10000);
Beep(600,200);
Beep(800,200);
keybd_event(Ord('A'), 0 , 0, 0 );

end.

キーを下げる指示しかしていないのに連続入力されません。


下げたままにするにはどうしたらよいのでしょうか。
よろしくお願いします。

編集 削除
ペンネイム  2006-07-17 17:59:33  No: 22650  IP: 192.*.*.*

keybd_event(Ord('A'), 0 , 0, 0 );
sleep(2000);
if GetKeyState(Ord('A')) <> 0 then beep(800,500);
としてみると確かに押されていますね。
キーボードの例えば「A」ボタンを物理的に下げるのと同じ結果を得る方法はありませんか。
メモ帳を例にしましたが汎用的な方法でお願いします。

編集 削除
ペンネイム  2006-08-22 21:28:41  No: 22651  IP: 192.*.*.*

age(ッえ?

編集 削除
とんこつ  2006-08-22 21:44:50  No: 22652  IP: 192.*.*.*

ごめw
キーボードの押しっぱなしは
up,downの連続メッセージです。down状態の保持ではありません。
キーボードを仮想的におすにはkeybd_eventですが、
本当に押すのと同じ効果を出すには、キーボードドライバを書くしかありません。しかし、仮想キーを弾くアプリケーションはオンラインゲーム等、極めて特殊なソフト位です。

編集 削除
GTR  2006-08-25 11:06:18  No: 22653  IP: 192.*.*.*

キーボード押しっぱなしは
  keybd_event(ORD('A'), 0, 0, 0);
  keybd_event(ORD('A'), 0, 1 , 0);
で出来ないですか?

編集 削除
GTR  2006-08-25 19:26:42  No: 22654  IP: 192.*.*.*

先程の補足です。
キーが押されっぱなしですから
While true Do begin
  keybd_event(ORD('A'), 0, 0, 0);
  keybd_event(ORD('A'), 0, 1 , 0);

  //Break 条件を記入
end;
でOKだと思います。

編集 削除
ホソクのホソク  2006-08-26 00:01:58  No: 22655  IP: 192.*.*.*

これで必要十分?
(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;

編集 削除