gpt4 book ai didi

windows - 在 Windows 7 中,是否可以在用户未登录的情况下获取 GUI 应用程序主窗口的标题?我知道,立即回答是否定的

转载 作者:可可西里 更新时间:2023-11-01 09:34:28 26 4
gpt4 key购买 nike

编辑:为了我希望的清晰而编辑

有一个 GUI 应用程序只有一个主窗口。该主窗口的标题栏中有文本;我的任务是检索主窗口标题栏中的文本。

通常,如果用户已登录,应用程序会正常启动,我可以使用 PowerShell 通过调用 System.Diagnostic.Process.MainWindowTitle 获取主窗口的标题,没问题。

但是,我需要在没有用户登录时获取相同的信息。我打算编写一个脚本或一个小型控制台应用程序,由任务调度程序启动来执行此操作。这很奇怪,我知道:我需要在没有用户登录系统时启动这个应用程序,并在其唯一主窗口的标题栏中检索文本。

我知道当没有用户登录时,任务调度程序显然仍会尽职尽责地尝试运行脚本或可执行文件。但是,由于没有用户登录,这些预定的可执行文件或脚本将无法访问 Windows GUI 子系统。因此,如果计划任务试图启动需要绘制窗口的应用程序,那么,该窗口将不会被绘制。

这意味着我不能简单地安排一个脚本来启动这个 GUI 应用程序,在磁贴栏中获取文本然后终止应用程序(我不能这样做,因为应用程序永远不会绘制它的主窗口) .

我有一些想法,我希望对它们提出意见(或什至其他替代方案):

  • 最简单但最不理想的方法是,我会尝试强制用户登录(即使没有实际用户)。这应该加载 GUI 子系统 并显示主窗口。捕获主窗口标题的文本后,我会再次注销。

  • 在某些时候,应用程序将调用一些 Windows API 请求绘制一个窗口(由于前面提到的缺少 GUI 子系统,因此不会绘制)。也许我能以某种方式捕获这个请求,也许在这个请求中,我能找到主窗口标题?还是指向内存中的指针?什么?

  • 这似乎不太可行,但也许我可以为机器本身建立一个 RDP。我的想法是,例如,当您将 RDP 连接到 headless 服务器时,服务器会生成可视化元素并将其发送回客户端。因此,当建立 RDP 连接时,GUI 子系统 应该处于事件状态以绘制需要发回的元素。在我的例子中,元素没有发送到任何地方,但我希望它们仍然会被创建,这样我就可以抓取窗口文本。

最后,我想说明我已经尝试过解析二进制文件的字符串,希望在编译时从存储在二进制文件中的主窗口标题中找到信息。但是,它不够可靠,无法持续使用。

如果有人真的读完了这幅墙纸文字,那就太棒了,谢谢你。我会采用任何语言的解决方案,但我最擅长 C++ 和 C#。

最佳答案

创建它以便暴露解决方案。

事实证明,System.Diagnostic.Process.MainWindowTitle 并不总是按预期运行。最后,我所要做的就是使用 EnumWindows 枚举顶级窗口并使用 GetWindowText 获取 GUI 应用程序的标题。

我编写了一个控制台应用程序来执行此操作,并且控制台应用程序能够启动 GUI 应用程序并获取其主窗口标题。它通过远程 PowerShell session 以及通过任务计划程序启动时工作。

不确定为什么 System.Diagnostic.Process.MainWindowTitle 与枚举顶部窗口和使用 GetWindowText 不同,但我想那是另一次了。

感谢所有伸出援手的人。

关于windows - 在 Windows 7 中,是否可以在用户未登录的情况下获取 GUI 应用程序主窗口的标题?我知道,立即回答是否定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16906733/

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