Я пытаюсь использовать sendinput API в окне дочернего mdi во внешнем приложении, чтобы отправлять ему ключи/мышь для математических операций. У меня есть идентификатор дескриптора окна и используйте API окон setfocus для установки на него, но sendinput не отправит ключи. Я перехожу к элементам приема, которые позволяют использовать числовые значения. Кроме того, мне нужны некоторые числовые значения для отправки в виде десятичного ввода, например, 3.3. Если вам нужно изображение внешнего приложения, пожалуйста, прокомментируйте ниже, и я разместим изображение в моей учетной записи Google.Как использовать sendinput для дочернего окна mdi во внешнем приложении?
......
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
Edit: вот ссылка на изображение, так кто-то может понять, как вход должен быть отправлен: https://drive.google.com/file/d/0BwIppJC0dxJBalp3Ykd2VzZkQ0E/edit?usp=sharing
целевого управления для отправки ввода являются Psi, D, и другие ценности которые могут быть изменены в Panel0, и мне также нужно нажать кнопку.
Проблема заключается в том, что отправка ввода не работает вообще, и в моем окне сообщения указано, что вход был отправлен.
Примечание: windowid - это дескриптор окна mdi, который я нашел для использования окна Iam, а VK_ - коды виртуального ключа для sendinput. – starman
Фокус не достаточно, окно должно быть на переднем плане. Функция SetForegroundWindow(). –
Я использовал экранное окно, но оно не работает. Я прокомментировал это выше в коде. Я мог бы использовать setforegroundwindow и setfocus в обратном порядке или неправильно. Есть ли у вас какие-либо предложения? – starman