お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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