代码之家  ›  专栏  ›  技术社区  ›  madlan

SendKeys\SendMessage API到最小化窗口?

  •  0
  • madlan  · 技术社区  · 14 年前

    我正在尝试启动一个应用程序,通过发送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需要一个活动的/集中的窗口。

    我认为SendMessage将是答案,但我看不到发送所需组合键的任何方式?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

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

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

        2
  •  0
  •   NoAlias    14 年前

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