c#将焦点从其他应用程序返回到父表单
c# Giving focus back to parent form from other app
我正在尝试从我的主应用程序的子形式启动 .exe,但问题是当我打开另一个 .exe 并完成它的工作(扫描指纹)并退出时,我的应用程序被最小化,所以我试试这个:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
void method {
..........more code...........
using (Process proc = new Process())
{
proc.StartInfo.FileName = "WindowsFormsApplication3.exe";
proc.Start();
SetForegroundWindow(proc.MainWindowHandle);
}
............code here..............
}
但它不起作用,我的主应用程序失去了焦点,我找到了很多解决方案,但其中任何一个都对我有用,另一个 .exe 也是我正在做的一个应用程序。
如果你想激活指纹window,你的代码是对的!但是在 SetForegroundWindow 之前添加等待 ... 像这样:
while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
System.Threading.Thread.Sleep(100);
proc.Refresh();
}
并且,如果您想激活调用者表单(主应用程序),则不需要 SetForegroundWindow!你可以这样写:
while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
System.Threading.Thread.Sleep(100);
proc.Refresh();
}
// Then active caller form...
this.Activate();
无论如何,您需要等到指纹 window 显示...
我正在尝试从我的主应用程序的子形式启动 .exe,但问题是当我打开另一个 .exe 并完成它的工作(扫描指纹)并退出时,我的应用程序被最小化,所以我试试这个:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
void method {
..........more code...........
using (Process proc = new Process())
{
proc.StartInfo.FileName = "WindowsFormsApplication3.exe";
proc.Start();
SetForegroundWindow(proc.MainWindowHandle);
}
............code here..............
}
但它不起作用,我的主应用程序失去了焦点,我找到了很多解决方案,但其中任何一个都对我有用,另一个 .exe 也是我正在做的一个应用程序。
如果你想激活指纹window,你的代码是对的!但是在 SetForegroundWindow 之前添加等待 ... 像这样:
while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
System.Threading.Thread.Sleep(100);
proc.Refresh();
}
并且,如果您想激活调用者表单(主应用程序),则不需要 SetForegroundWindow!你可以这样写:
while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
System.Threading.Thread.Sleep(100);
proc.Refresh();
}
// Then active caller form...
this.Activate();
无论如何,您需要等到指纹 window 显示...