0

外部アプリケーションの mdi 子ウィンドウで sendinput API を使用して、数学演算のためにキー/マウス入力を外部アプリケーションに送信しようとしています。ウィンドウ ハンドル ID があり、setfocus ウィンドウ API を使用してそれにフォーカスを設定しますが、sendinput はキーを送信しません。数値を許可する受信コントロールにタブで移動します。さらに、3.3 などの数値を 10 進入力として送信する必要があります。外部アプリケーションの画像が必要な場合は、以下にコメントしてください。Google ドライブ アカウントに画像を投稿します。

......
Dim hNoteThread As IntPtr = GetWindowThreadProcessId(windowids(foundid), IntPtr.Zero)
    If hNoteThread <> 0 Then
        MsgBox("Panel 0 found for input")
    End If
    ' SetForegroundWindow(windowids(foundid))
    If AttachThreadInput(GetCurrentThreadId(), hNoteThread, True) = True Then
        SetFocus(windowids(foundid))
        System.Threading.Thread.Sleep(1000)
        SendKey(VK_TAB)
        System.Threading.Thread.Sleep(2000)
        SendKey(VK_NUMPAD2)
        System.Threading.Thread.Sleep(2000)
        SendKey(VK_TAB)
        SendKey(VK_NUMPAD0 + VK_DECIMAL + VK_NUMPAD5)
        ' System.Threading.Thread.Sleep(1000)
        SendKey(VK_TAB)
        SendKey(VK_NUMPAD1)
        ' System.Threading.Thread.Sleep(1000)
        SendKey(VK_TAB)
        SendKey(VK_NUMPAD2)
        System.Threading.Thread.Sleep(2000)
        MsgBox("keys sent")
    Else
        MsgBox("keys not sent")
    End If

    Private Sub SendKey(ByVal bKey As Short)
    Dim GInput(1) As INPUT

    ' press the key
    GInput(0).type = INPUT_KEYBOARD
    GInput(0).ki.wVk = bKey
    GInput(0).ki.dwFlags = 0

    ' release the key
    GInput(1).type = INPUT_KEYBOARD
    GInput(1).ki.wVk = bKey
    GInput(1).ki.dwFlags = KEYEVENTF_KEYUP


    SendInput(2, GInput, Marshal.SizeOf(GetType(INPUT)))

End Sub

編集: ここに画像へのリンクがあるので、誰かが入力を送信する方法を理解できます: https://drive.google.com/file/d/0BwIppJC0dxJBalp3Ykd2VzZkQ0E/edit?usp=sharing

入力を送信するためのターゲット コントロールは、Panel0 で変更できる Psi、D、およびその他の値であり、ボタンもクリックする必要があります。

問題は、入力の送信がまったく機能せず、入力が送信されたことを示すメッセージ ボックスが表示されることです。

4

1 に答える 1