我有一个 C# 控制台应用程序 (A),它以黑色 Windows 控制台打开。有时在启动时它会从另一个程序 (B) 中窃取焦点needs焦点。
问题:我怎样才能把焦点从A.exe
to B.exe
?
A -> Focus -> B
Details:
- 计划B不是我的,我对此无能为力。它有一个 GUI、多个窗口,其中 1 个需要焦点(它可能是一个模式对话框窗口)。
- 程序 A 不需要任何焦点,也不会以任何方式与程序 B 交互。
- 程序 A 通过启动快捷方式启动并基本上在后台运行(它已发布但仍在开发中,这就是控制台窗口的原因)
- 我有一些时间/最多几分钟的时间来检查并重新集中注意力。
// this should do the trick....
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr WindowHandle);
public const int SW_RESTORE = 9;
private void FocusProcess(string procName)
{
Process[] objProcesses = System.Diagnostics.Process.GetProcessesByName(procName);
if (objProcesses.Length > 0)
{
IntPtr hWnd = IntPtr.Zero;
hWnd = objProcesses[0].MainWindowHandle;
ShowWindowAsync(new HandleRef(null,hWnd), SW_RESTORE);
SetForegroundWindow(objProcesses[0].MainWindowHandle);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)