加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在没有cmd.exe弹出窗口的情况下使用popen在Windows上执行任务列

发布时间:2020-12-14 05:30:10 所属栏目:Windows 来源:网络整理
导读:大家好,感谢您的时间. 我正在用C开发某种监控应用程序,我需要获取当前的任务列表.因此,我正在使用tasklist并获得输出,这要归功于popen(); ptr = popen("tasklist /V","r");while(1){ if(fgets(temp,255,ptr) == NULL) break; fputs(temp,log);} 问题是,在几
大家好,感谢您的时间.

我正在用C开发某种监控应用程序,我需要获取当前的任务列表.因此,我正在使用tasklist并获得输出,这要归功于popen();

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

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

所以,我花了好几天时间查看popen方式或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

我也尝试了最后一个,所以我会读取somefile的输出,但似乎tasklist强制输出到stdout,因为创建文件后没有写入数据.

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

解决方法

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

这种方法有点脆弱,因为您可能会发现您的应用程序在具有不同输出格式的任务列表版本的计算机上运行.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读