gpt4 book ai didi

wpf - 使用 WPF 获取所有打开的桌面应用程序

转载 作者:行者123 更新时间:2023-12-04 19:48:36 28 4
gpt4 key购买 nike

我正在尝试创建一个 Visual Tree Explorer 应用程序(如 Snoop、Mole),它应该自动识别所有桌面应用程序并检测它是否是 WPF 应用程序。或不。我正在尝试在 WPF 中执行此操作。有没有办法让所有 WPF 打开的应用程序。任何特殊的 API,或系统 dll 中的 native 函数等。

问候,

贾瓦哈尔

最佳答案

我认为您可以遍历所有进程的列表,对于那些有窗口的进程,检查窗口类名是否以 HwndWrapper 开头(我注意到 WPF 窗口有这样一个类名:HwndWrapper[DefaultDomain ;;2e60e21a-8752-4daf-820b-aed289668930])

代码应该是这样的:

Process[] procs = Process.GetProcesses();
foreach(Process p in procs)
{
if (p.MainWindowHandle != null)
{
Console.WriteLine(p.MainWindowTitle);
StringBuilder sb = new StringBuilder(257);
RealGetWindowClass(p.MainWindowHandle, sb, 256);
Console.WriteLine(sb.ToString());
if(sb.ToString().StartsWith("HwndWrapper"))
{
Console.WriteLine("WPF window");
}
}
}

[DllImport("user32.dll")]
static extern uint RealGetWindowClass(IntPtr hwnd, [Out] StringBuilder pszType, uint cchType);

可能会根据您的情况进行一些调整。在处理这样的窗口时,应该假设它是一个 WPF 窗口,而不是肯定的,因此必须进行广泛的错误检查。

关于wpf - 使用 WPF 获取所有打开的桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545111/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com