获取打开的窗口列表C#

use*_*206 6 c# winforms

在安装任何应用程序期间.通常要求用户在开始安装之前关闭所有窗口.如果没有,安装将停在中间并要求用户关闭所有打开的窗口.我被要求在XXX应用程序中添加代码.当应用程序运行并且用户打开任何其他窗口时(例如:浏览,浏览器,单词等),应用程序应抛出一个窗口,说明您已打开窗口列表.我请你告诉我如何从C#开始.

Ami*_*imi 7

测试一下:

var openWindowProcesses = System.Diagnostics.Process.GetProcesses()
   .Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer");
Run Code Online (Sandbox Code Playgroud)

openWindowProcesses是否应包含他们有一个活跃的主窗口中所有打开的应用程序.

我放入p.ProcessName != "explorer"了where表达式,因为资源管理器是桌面的主要进程,它永远不会被关闭.

要观察进程的执行,您可以使用ManagementEventWatcher类.请看到这个.


小智 0

尝试通过 P/Invoke SetWinEventHook WinAPI 函数。你可以挂钩EVENT_OBJECT_CREATE事件,但我不是 100% 确定。我从来没有用C#做过,只用过C/C++。