Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows7中,是否可以在没有用户登录的情况下获取GUI应用程序主窗口的标题?我知道,立即的答案是否定的_Windows_Winapi_User Interface - Fatal编程技术网

在Windows7中,是否可以在没有用户登录的情况下获取GUI应用程序主窗口的标题?我知道,立即的答案是否定的

在Windows7中,是否可以在没有用户登录的情况下获取GUI应用程序主窗口的标题?我知道,立即的答案是否定的,windows,winapi,user-interface,Windows,Winapi,User Interface,编辑:我希望是为了清晰而编辑 有一个GUI应用程序只有一个主窗口。主窗口的标题栏中有文本;我的任务是检索主窗口标题栏中的文本 通常,如果用户登录,应用程序启动正常,我可以通过调用System.Diagnostic.Process.MainWindowTitle,使用PowerShell获取主窗口的标题,没有问题 但是,当没有用户登录时,我需要获取相同的信息。我打算编写一个脚本或一个小型控制台应用程序,由任务调度器启动。这很奇怪,我知道:我需要在没有用户登录系统时启动这个应用程序,并在其唯一主窗口

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

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

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

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

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

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

我有一些想法,我希望得到他们的意见(甚至其他选择):

  • 最简单但最不可取的是,我会尝试强制用户登录(即使没有实际用户)。这将加载GUI子系统并显示主窗口。我会在抓取主窗口标题的文本后再次注销

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

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

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


如果有人真的读到了这篇文章的结尾,那就太棒了,如果你读到了,那就谢谢你了。我会用任何语言解决问题,但我最好是C++和C语言。< /p> < p>创建此,以便解决方案被暴露。

结果表明System.Diagnostic.Process.MainWindowTitle的行为并不总是如预期的那样。最后,我所要做的就是用EnumWindows枚举顶部窗口,并使用GetWindowText获取GUI应用程序的标题

我编写了一个控制台应用程序,它可以实现这一点,控制台应用程序能够启动GUI应用程序并获取其主窗口标题。它通过远程PowerShell会话以及通过任务调度器启动时工作

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


感谢所有伸出援手的人。

如果没有用户登录,就不会运行GUI进程。我的理解是,GUI应用程序仍将运行其进程,但创建GUI元素的任何API调用都将失败。事实上,我现在刚刚尝试过:一个C#windows窗体项目。有一个带按钮的表单,仅此而已。我在绘制主窗体的函数之前写入文件,然后在绘制主窗体之后再次写入文件。结果:主窗体之前的文件写入成功,而主窗体之后的文件写入失败。我完全不知道你在说什么。抱歉,您可能想尝试各种不同的方法来获取标题。
get进程
使用的一个不起作用,
tasklist
也不起作用,但其他进程可能会起作用。由于在应用程序创建窗口时,您的代码已经可以控制了,也许一个全局钩子可以捕获WM_SETTEXT消息?对不起,您是对的,发生了一些奇怪的事情。如果运行任务列表,则无法看到窗口标题。如果我使用EnumWindows枚举所有顶级窗口并调用GetWindowText,我可以检索窗口标题,包括我启动的GUI进程的标题。如果执行此操作,Windows可以连接到具有GetWindowThreadProcessId的进程。