我正在尝试启动一个应用程序,通过发送Ctrl m + Ctrl a然后按Alt Gr O来确认对话框来启动保存。
Dim myProcess As System.Diagnostics.Process = New System.Diagnostics.Process()
myProcess.StartInfo.FileName = Application.StartupPath & "another.exe"
myProcess.StartInfo.Arguments = " /Args"
myProcess.Start()
Thread.Sleep(5000)
System.Windows.Forms.SendKeys.Send("^%(M)^%(A)")
System.Windows.Forms.SendKeys.Send("%(O)")
然后我强迫应用程序最小化:
ShowWindow(p.MainWindowHandle, SHOW_WINDOW.SW_MINIMIZE)
如果窗口处于活动状态并且聚焦,这非常有用,我更希望这个过程以静默方式完成(它会产生它自己的进度对话框)但SendKeys需要一个活动的\ focus窗口。
我认为SendMessage将成为答案,但我看不出任何方式发送所需的密钥组合?
答案 0 :(得分:2)
您无法可靠地使用SendMessage()发送击键。您无法控制进程的键盘状态,Alt,Ctrl和Shift键的状态。 SetKeyboardState()仅适用于您的程序,而不适用于您尝试控制的程序。 SendInput是必需的,这是SendKeys使用的。这反过来要求程序的主窗口具有焦点。
换句话说,如果有更好的方法来伪造键盘输入,那么SendKeys就已经在使用它了。有一个程序员试图让他的孩子上大学,因为他知道这个程序,可以给你一个真正的解决方案。你所要做的就是找到他。
答案 1 :(得分:0)
SendKeys不是最可靠的,但您可以尝试使用AppActivate Function将焦点放在目标窗口/应用程序上。