4

大家好,感谢您的宝贵时间。

我正在用 C 语言开发某种监控应用程序,我需要获取当前任务列表。所以我正在使用任务列表并通过 popen() 获得输出;

ptr = popen("tasklist /V", "r");
while(1)
{
    if(fgets(temp, 255, ptr) == NULL) break;
    fputs(temp, log);
}

问题是,在几分之一秒内会弹出一个 cmd.exe 窗口,这真的很令人不安,因为它会将焦点切换到那个新窗口上,这会使我的应用程序进入窗口模式而不是全屏模式。

因此,我花了几天时间研究弹出方式或 Windows 本身的方式,以在“隐藏”模式/窗口中启动该过程,但没有得到任何结果。我已经尝试过的事情包括:

cmd.exe /c tasklist /V
start /b cmd.exe /c tasklist /V
start /min /b cmd.exe /c tasklist /V
start /min cmd.exe /c tasklist /V
tasklist > somefile

我也尝试了最后一个,所以我会从该文件中读取输出,但似乎任务列表强制输出到标准输出,因为尽管创建了文件,但没有写入数据。

希望你的回答,无论如何谢谢你。

4

2 回答 2

3

您可以通过调用CreateProcess传递SW_HIDE作为结构的wShowWindow字段STARTUPINFO并包含CREATE_NO_WINDOW在中来实现这一点dwCreationFlags

这种方法有点脆弱,因为您可能会发现您的应用程序在tasklist具有不同输出格式的版本的机器上运行。

如果您想要所有正在运行的进程的列表,您可以调用EnumProcesses.

于 2011-01-25T17:02:42.607 回答
1

使用EnumProcesses可以轻松完成任务。

这里给出了直观的例子。

于 2011-01-25T17:37:08.190 回答