gpt4 book ai didi

c# - 如何从 Windows 7 中的 C# 检测应用程序中是否包含 UI 元素?

转载 作者:太空宇宙 更新时间:2023-11-03 22:22:01 25 4
gpt4 key购买 nike

我在 Windows 7 中有一个在 session 0 中运行的 c# 应用程序。这个应用程序基本上是一个软件补丁安装框架,它将在后台(在 session 0 中)安装补丁。

所以这个应用程序将从服务器下载补丁并开始在客户端机器上安装它们。它安装补丁的方式是调用 CreateProcess("Patch.exe")。

现在大多数情况下,Patch.exe 将是非 ui 静默安装,从今以后,从 session 0 成功安装补丁。

但是,有时这个 Patch.exe 恰好有一些 UI 元素在里面,比如提示用户一些细节(比如安装位置等),可以说这些 UI 元素是不可避免的。

那么我的安装框架(在用 C# 编写的 Session 0 中运行)是否有可能知道由我的框架创建的进程 Patch.exe 中有任何 UI 元素?

我问的原因是,如果我确定应用程序中有任何 UI 元素,那么我不想继续安装(这样做的粗略方法是终止安装程序进程 Patch.exe,但这是一个不同的故事,这里不关心)。

最佳答案

您可以使用 EnumWindows API 函数遍历每个窗口并通过调用 GetWindowThreadProcessId 检查它是否属于您的 Patch.exe 实例(假设您已经创建了Patch.exe 的进程并具有其 PID)。您可以通过使用 GWL_STYLE 参数调用 GetWindowLong 来强制执行此检查,并检查生成的样式是否设置了 WS_VISIBLE 位。一些应用程序可以创建隐藏窗口来执行与用户界面实际上无关的操作。

或者,您可以使用带有参数 EVENT_OBJECT_CREATESetWinEventHook 来在每次创建新窗口时接收通知。然后,您可以执行上述检查。

关于c# - 如何从 Windows 7 中的 C# 检测应用程序中是否包含 UI 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763640/

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