.net 如何更改Windows上的活动窗口?

.net 如何更改Windows上的活动窗口?,.net,windows,.net,Windows,我需要能够根据COM端口的输入在两个第三方应用程序之间切换,即当我从设备接收到Command1时,将App1设置为活动(最顶部)窗口,当我从设备接收到Command2时,将App2设置为活动窗口。我为什么要这样做?该应用程序将在自助服务站上运行,我将监控运动传感器的输入;因此,当没有人站在车站前面时,我需要显示App2(例如广告),当有人站在车站前面时,我需要显示App1(例如主应用程序) 我正在考虑一个在后台运行的应用程序,它侦听COM端口上的输入,并相应地切换活动窗口。所以问题是,如何使用.

我需要能够根据COM端口的输入在两个第三方应用程序之间切换,即当我从设备接收到
Command1
时,将App1设置为活动(最顶部)窗口,当我从设备接收到
Command2
时,将App2设置为活动窗口。我为什么要这样做?该应用程序将在自助服务站上运行,我将监控运动传感器的输入;因此,当没有人站在车站前面时,我需要显示App2(例如广告),当有人站在车站前面时,我需要显示App1(例如主应用程序)

我正在考虑一个在后台运行的应用程序,它侦听COM端口上的输入,并相应地切换活动窗口。所以问题是,如何使用.NET更改活动窗口?操作系统将是Windows XP Pro SP2,但如果它也能在Windows 7上运行,那就更好了。

您可以使用

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
然后通过名称或循环
getprocesss
查找相关流程,例如,假设一个实例:

Process[] process = Process.GetProcessesByName("myapp");
if (process.Length > 0 && process[0].MainWindowHandle != IntPtr.Zero) {
   SetForegroundWindow(process[0].MainWindowHandle);
}

仅供参考,在第7章中没有简单的与用户桌面交互的服务;Windows服务无法从Windows Vista开始与用户的桌面交互。无论如何,这不应该是一个服务,只需创建一个后台应用程序(即,一个不显示任何表单的标准表单应用程序)。此外,更改活动窗口也会从根本上被破坏。这是只有用户才能做的事情,而不是应用程序。Windows将在每一步都与你抗争,你的用户不会很高兴。将问题更改为“后台应用”,谢谢。。。还添加了更多关于我为什么要这样做的信息。也许你可以在一个应用程序中使用两个表单,只显示和隐藏相应的表单。我想这会容易得多,您可以将每个窗口的逻辑封装在不同的类(甚至应用程序加载的DLL)中,以保持其先锋性。@Lucas问题是,这两个都是第三方应用程序,因此我无法控制它们。您所说的一切都是真的,但我不得不指出,这是有条件的。正如我在前面的评论中提到的,通常不鼓励尝试将应用程序中的活动窗口更改为其他进程所拥有的窗口。恶意应用程序通常会寻找这样做的方法来烦扰用户,而Windows团队在这方面的能力正逐渐黯然失色。很有可能,这段代码只会导致其他应用程序闪烁其任务栏按钮。我试用了你的代码,它确实有效。我想指出一个事实,我从我的应用程序派生了两个进程(第三方应用程序),因此这可能会有所帮助。不过这种行为还是有点不一致,因为当我移动鼠标时,它会闪烁任务栏而不是切换窗口。无论如何,这个解决方案似乎足够满足我的需要。