SendInputで文字列を送るには?

解決


さかな  2006-01-18 01:54:25  No: 129615

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


もげ  2006-01-18 02:22:01  No: 129616

http://www.bcap.co.jp/hanafusa/VBHLP/SendInput.htm


さかな  2006-01-18 03:58:10  No: 129617

http://www.bcap.co.jp/hanafusa/VBHLP/SendInput.htm
で、2バイト文字の場合はどうするんでしょか?


ガッ  2006-01-18 04:16:28  No: 129618

> で、2バイト文字の場合はどうするんでしょか?
そもそもSendInputは文字列を送るのではなくて、
「仮にキーを叩いたら」という動作をシミュレートするだけのはず。
というわけで、まるでキーボードで入力するように、プログラムを組むのではないかと。


さかな  2006-01-18 21:18:15  No: 129619

wScanへの設定は、KEYBDINPUT構造体のMSDNを見れば解かることでした。
目的達成ということで解決とします。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加