SendKeys \ SendMessage API最小化窗口?

时间:2010-11-28 15:19:14

标签: vb.net

我正在尝试启动一个应用程序,通过发送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将成为答案,但我看不出任何方式发送所需的密钥组合?

2 个答案:

答案 0 :(得分:2)

您无法可靠地使用SendMessage()发送击键。您无法控制进程的键盘状态,Alt,Ctrl和Shift键的状态。 SetKeyboardState()仅适用于您的程序,而不适用于您尝试控制的程序。 SendInput是必需的,这是SendKeys使用的。这反过来要求程序的主窗口具有焦点。

换句话说,如果有更好的方法来伪造键盘输入,那么SendKeys就已经在使用它了。有一个程序员试图让他的孩子上大学,因为他知道这个程序,可以给你一个真正的解决方案。你所要做的就是找到他。

答案 1 :(得分:0)

SendKeys不是最可靠的,但您可以尝试使用AppActivate Function将焦点放在目标窗口/应用程序上。