我有一个从vb6迁移的vb.net桌面应用程序。
单击按钮,Shell或Prcess.Start方法启动exe。
现在用户调整exe窗口的大小。
我希望再次单击按钮将启动或刷新已存在的exe窗口中的exe。不应打开新窗口,并保留窗口大小,因为它是由用户设置的。
使用AppActivate方法,但它只将焦点设置为现有的exe窗口,而不是刷新窗口上的exe。
有没有办法做到这一点。 提前致谢。
答案 0 :(得分:1)
您需要P/Invoke才能实现此目标。
这是一个片段。刚刚测试过,似乎工作正常。
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Public Class ProcessStuff
Private _processRunning as Process
Public Sub StartOrActivate()
If _processRunning Is Nothing
_processRunning = ' Arguments to Start the process and retrieve the object
Else
' Activate Process' Main Window
SetForegroundWindow(_processRunning.MainWindowHandle)
End If
End Sub
<DllImport("user32.dll")>
Private Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
End Function
End Class
修改强>
我可以理解您的上一条评论,您希望该过程为single instanced。
但是:请注意,目标应用程序(进程)必须为此做好准备!