VB6で、SendInputを使用して他アプリに文字列を送る関数を自作したいのですが、KEYBDINPUT構造体のwScanフィールドへの設定が解かりません。
具体的な方法を教えて下さい。
' テストコード
Option Explicit
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_UNICODE = &H4
Private Const INPUT_KEYBOARD = 1
Private Type KEYBDINPUT
wVk As Integer
wScan As Integer
dwFlags As Long
time As Long
dwExtraInfo As Long
dummy(0 To 7) As Byte
End Type
Private Type INPUT_KEYEVENT
dwType As Long
ki As KEYBDINPUT
End Type
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_KEYEVENT, ByVal cbSize As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
AppActivate "無題 - メモ帳"
Sleep 100
Call SendString("メモ帳をアクティブにして文字列を送る。")
End Sub
Private Sub SendString(ByVal str As String)
Dim inp(0 To 1) As INPUT_KEYEVENT
Dim p As Long
Dim s As String
inp(0).dwType = INPUT_KEYBOARD
inp(0).ki.dwFlags = KEYEVENTF_UNICODE
inp(1).dwType = INPUT_KEYBOARD
inp(1).ki.dwFlags = KEYEVENTF_UNICODE Or KEYEVENTF_KEYUP
For p = 1 To Len(str)
s = Mid$(str, p, 1)
inp(0).ki.wScan = ' <--- ここが解かりません。
inp(1).ki.wScan = ' <--- ここが解かりません。
Call SendInput(2, inp(0), Len(inp(0)))
Next
End Sub
http://www.bcap.co.jp/hanafusa/VBHLP/SendInput.htm
> http://www.bcap.co.jp/hanafusa/VBHLP/SendInput.htm
で、2バイト文字の場合はどうするんでしょか?
> で、2バイト文字の場合はどうするんでしょか?
そもそもSendInputは文字列を送るのではなくて、
「仮にキーを叩いたら」という動作をシミュレートするだけのはず。
というわけで、まるでキーボードで入力するように、プログラムを組むのではないかと。
wScanへの設定は、KEYBDINPUT構造体のMSDNを見れば解かることでした。
目的達成ということで解決とします。
ツイート | ![]() |