如何从C#中的控制台窗口回放焦点?

我有一个C#控制台应用程序(A)打开黑色Windows控制台。 有时在启动时它会从另一个需要关注的程序(B)中窃取焦点。

问题:如何从A.exeB.exe重点关注?

 A -> Focus -> B 

细节:

  • 程序B不是我的,我无能为力。 它有一个GUI,多个窗口,其中一个需要焦点(它可能是一个模态对话窗口)。
  • 程序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); } }