|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ActiveWindowに仮想キーを送信"
アクティブウィンドウに仮想キーを送るサンプルです。
KeyBoard_Event API じゃなくて SendInput API を使用してみました。
Windows2000 で VK_SHIFT がうまく送れない現象にもスキャンコードを指定する
ことで対応しています。
なお SendInput は Win98 or WinNT4 SP3 以降でサポートされます
コードを作成した環境は Win2000Pro(SP1) + Delphi5(UP1) です
以下 {SHIFT}+{TAB} の送信例です。
procedure SendShiftTab;
var
KeyInputs: array of TInput;
KeyInputCount: Integer;
procedure KeybdInput(VKey: Byte; Flags: DWord);
begin
Inc(KeyInputCount);
SetLength(KeyInputs, KeyInputCount); // 仮想Key用の配列を確保
KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
with KeyInputs[KeyInputCount - 1].ki do
begin
wVk := VKey;
// 仮想キーコードをスキャンコードに変換してセット
wScan := MapVirtualKey(wVk, 0);
dwFlags := KEYEVENTF_EXTENDEDKEY;
dwFlags := Flags or dwFlags;
time := 0;
dwExtraInfo := 0;
end;
end;
begin
KeybdInput(VK_SHIFT, 0); // Shift を下げる
KeybdInput(VK_TAB, 0); // Tab を下げる
KeybdInput(VK_TAB, KEYEVENTF_KEYUP); // Tab を上げる
KeybdInput(VK_SHIFT, KEYEVENTF_KEYUP); // Shift を上げる
SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;
2001/01/18(木) 05:15pm Ohtaka(QZF12401)
Original document by Ohtaka 氏 ID:(QZF12401)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|