外部アプリケーションの 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、およびその他の値であり、ボタンもクリックする必要があります。
問題は、入力の送信がまったく機能せず、入力が送信されたことを示すメッセージ ボックスが表示されることです。