所以我目前在电子引擎上有一个多监视器应用程序,它打开一个不同的窗口,每个监视器上都有单独的内容。它使用2个具有相同名称的独立进程来显示这些窗口," home"。
然后,该应用程序可用于启动不同的窗口。其中一个被称为"游戏"。此游戏在主监视器上打开一个控制样式窗口,然后在第二个监视器上打开实际游戏。这两个都是不同的过程,都被称为"游戏"。
我们目前有一个小型的c#控制台应用程序可以调用并传递一个字符串来尝试将这些应用程序带到前面,如下所示:
class Program
{
[DllImport("user32.dll")]
private static extern IntPtr SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
static void Main(string[] args)
{
BringToFront(args[0]);
}
private static void BringToFront(string title)
{
// Get a handle to the Calculator application.
Process[] processes = Process.GetProcessesByName(title);
if (processes.Length > 1)
{
foreach(Process process in processes)
{
IntPtr mainWindowHandle = process.MainWindowHandle;
if (mainWindowHandle == GetForegroundWindow()) return;
SetForegroundWindow(mainWindowHandle);
}
}
}
}
问题在于,这只会给前面带来一个窗口,而不是两者。 我研究了这个,发现它是由于围绕SetForegroundWindow的规则,除非我错了,当我们设置第一个前景窗口时,我们不允许将任何其他窗口设置为调用的控制台应用程序/进程控制台应用程序不再是前台进程。
有没有办法使用c#console app将两个独立的窗口带到前面?