キーストロークをシミュレートする
                                                         玄関へお回り下さい。
キーストロークをシミュレート(押下げ・制御)する                             (130)
     Option Explicit   'SampleNo=130 WindowsXP VB6.0(SP5) 2002.04.10
'キーストロークをシミュレートする(P1065)
Private Declare Sub keybd_event Lib "user32.dll" _
    (ByVal bVk As Byte, ByVal bScan As Byte, _
     ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'仮想キーコード・ASCII値・スキャンコード間でコードを変換する(P1067)
Private Declare Function MapVirtualKey Lib "user32" _
  Alias "MapVirtualKeyA" (ByVal wCode As Long, _
  ByVal wMapType As Long) As Long
Private Const VK_CAPITAL = &H14
Private Const VK_A = &H41
Private Const VK_KANJI = &H19
Private Const VK_RETURN = &HD
Private Const VK_SHIFT = &H10
Private Const VK_HOME = &H24
Private Const VK_END = &H23
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Sub Command1_Click()
'CapsLock キーを押す
  'CapsLock キーを押す
  Call keybd_event(VK_CAPITAL, 0, 0, 0)
  'CapsLock キーを離す
  Call keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0)
End Sub


Private Sub Command2_Click()
'A キーを押し、その後 Enter キーを押す
  Text1.Text = ""
  Text1.SetFocus
  Call keybd_event(VK_A, 0, 0, 0)
  Call keybd_event(VK_A, 0, KEYEVENTF_KEYUP, 0)
  Call keybd_event(VK_RETURN, 0, 0, 0)
  Call keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0)
End Sub


Private Sub Command3_Click()
'漢字キーのON・OFF
  Text1.SetFocus
  Call keybd_event(VK_KANJI, 0, 0, 0)
  Call keybd_event(VK_KANJI, 0, KEYEVENTF_KEYUP, 0)
End Sub


Private Sub Command4_Click()
'1行選択状態にする
  Text1.Text = "VBレスキュー(花ちゃん)"
  Text1.SetFocus
  Call keybd_event(VK_HOME, 0, 0&, 0&)
  Call keybd_event(VK_HOME, 0, KEYEVENTF_KEYUP, 0&)
  Call keybd_event(VK_SHIFT, 0, 0&, 0&)
  Call keybd_event(VK_END, 0, 0&, 0&)
  Call keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0&)
  Call keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0&)
  'これでは、Windows2000 や XP では Shift キーが動作してくれません。
End Sub


Private Sub Command5_Click()
'1行選択状態にする
  Text1.Text = "VBレスキュー(花ちゃん)"
  Text1.SetFocus
  Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), _
      KEYEVENTF_EXTENDEDKEY Or 0, 0)
  Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), _
      KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
  Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), _
      KEYEVENTF_EXTENDEDKEY Or 0, 0)
  Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), _
      KEYEVENTF_EXTENDEDKEY Or 0, 0)
  Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), _
      KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
  Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), _
      KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
  'こちらの設定ですと Windows95 以降 2000 や XP でもOKです。
End Sub


            実行画面
         

キーコード定数はVBのキーコード定数を使用しても動作するようです。
漢字キーの(ON/OFF)設定もXPではText1.SetFocusがなくても動作します。
このように Windows2000以降では少し変わっているようです。ご使用に際しては十分確認
してからご使用願います。
尚、
MicrosoftによるとWindows NT/2000ではこの関数の代わりにSendInput を使ってくださいと
の事です。
但し、SendInput を使って同様の操作をした結果上記同様Shift キーが動作してくれません。
その場合、ASCII値・スキャンコード間でコードを変換して下さい。




2002/04/10