Я пытаюсь отправить автоматические нажатия клавиш в приложение, которое не поддерживает копирование + вставка через небольшую форму VB. Форма загружает данные из текстового файла и использует SendKeys, чтобы запустить его, как только я нажму кнопку.VB: проблема с фокусом ShowWindow
Все работает, за исключением части ShowWindow. В настоящее время я тестирую Notepad, и, за одним исключением, я не могу заставить ShowWindow сосредоточиться на Notepad. Очевидно, я волнуюсь, что он будет делать то же самое с приложением, в котором я в конечном итоге буду работать против этого (в настоящее время у меня нет доступа к нему). Единственным параметром ShowWindow, который делает Notepad active, является SW_SHOWMAXIMIZED. SW_SHOW и SW_SHOWNORMAL ничего не делают, в то время как SW_RESTORE восстанавливает Блокнот, если сведен к минимуму, но моя форма VB остается активным окном.
Я не программист, но я ошибся, сказав своему боссу, что я учился в Паскале Турбо в старшей школе (более десяти лет назад), поэтому я застрял в попытке сделать эту работу. Мой нынешний код вымощен вместе с С.О. и другие источники:
(Я бегу Windows 7 и с помощью MVSE2013)
Imports System.Runtime.InteropServices
Public Class Form1
Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As ShowWindowCommands) As Boolean
End Function
Enum ShowWindowCommands As Integer
SW_SHOWNORMAL = 1
SW_SHOWMAXIMIZED = 3
SW_RESTORE = 9
End Enum
Private Sub Form1_Load
[form]
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim lHwnd As IntPtr = FindWindow("Notepad", vbNullString)
If lHwnd <> IntPtr.Zero Then
ShowWindow(lHwnd, ShowWindowCommands.SW_SHOWNORMAL)
SendKeys.Send(TextBox1.Text)
Else
[blah blah error handling]
End If
End Sub
Я хотел бы попробовать другой способ, как SetForegroundWindow, но я прочитал это не играет хорошо с Windows 7.