c++ - 测试Windows应用程序的运行状况

标签 c++ windows command-line

我有几个应用程序,它们是我们工作室的各个开发人员使用的工具套件的一部分。这些应用程序主要是打开 DOS cmd shell 的命令行应用程序。这些应用程序依次启动一个 GUI 应用程序,跟踪这些命令行应用程序的输出和状态(通过套接字)。

命令行应用程序可以在用户登录时启动,当他们的工作站被锁定时(他们启动批处理文件,然后立即锁定他们的工作站),以及当他们注销时(通过计划任务)。我遇到的问题是最后两个案例。

如果这些应用程序中的任何一个在用户锁定或注销时启动,这些命令将生成跟踪输出/状态的 GUI 窗口。这很好,但假设用户锁定了工作站 - 当他们解锁工作站时,GUI 不可见。它正在运行任务列表,但不可见。下次这些用户运行我们的某些命令行应用程序时,GUI 不会启动(因为它已经在运行),但由于它在桌面上不可见,因此用户看不到任何输出。

我正在寻找一种方法,从我的命令行应用程序中判断它们是否在锁定的工作站后面运行,或者当用户注销时(通过计划任务)——基本上它们是在用户桌面不可见的情况下运行的。如果我能知道这一点,那么我就可以不启动我们的 GUI,并且可以避免很多问题。

我需要测试的这些应用程序是 C/C++ Windows 应用程序。

我希望这是有道理的。

最佳答案

我找到了我正在寻找的程序化答案。和车站有关系。显然,桌面上运行的任何内容都将在具有特定名称的工作站上运行。桌面上不存在的任何内容(即注销时或在锁定的工作站上由任务管理器启动的进程)都将以不同的站名称启动。示例代码:

HWINSTA dHandle = GetProcessWindowStation();
if ( GetUserObjectInformation(dHandle, UOI_NAME, nameBuffer, bufferLen, &lenNeeded) ) {
    if ( stricmp(nameBuffer, "winsta0") ) {
        // when we get here, we are not running on the real desktop
        return false;
   }
}

如果您进入“if”语句,那么您的进程不在桌面上,而是在“其他地方”运行。我查看了未从桌面运行时的名称缓冲区值,这些名称没有多大意义,但它们不是 WinSta0。

链接到文档 here .

关于c++ - 测试Windows应用程序的运行状况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/87689/

相关文章:

java - JFileChooser 在 Windows 中更改默认目录

Windows 窗口对接

windows - 从命令行创建无声 mp3

python - 使用 Python 和 paramiko 以 root 身份执行远程命令

c++ - 如何比较任意基数的数字

c++ - 如何将 QString 转换为 int?

c++ - 模拟不存在的 3D 驱动程序

python - python 2.4 中的 cpuinfo for windows

java - 从java更改命令的工作目录

c++ - 使用 "if constexpr"和 SFINAE 禁用分支