簡體   English   中英

在沒有cmd.exe彈出窗口的情況下使用popen在Windows上執行任務列表

[英]Executing tasklist on Windows with popen in C without cmd.exe popup

大家好, 感謝您的時間。

我正在用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,因為創建文件后沒有寫入數據。

希望你的回答,無論如何,謝謝你。

您可以通過調用CreateProcessSW_HIDE作為STARTUPINFO結構的wShowWindow字段並在dwCreationFlags包含CREATE_NO_WINDOW來實現此dwCreationFlags

這種方法有點脆弱,因為您可能會發現您的應用程序在具有不同輸出格式的tasklist版本的計算機上運行。

如果您想要一個正在運行的所有進程的列表,您可以調用EnumProcesses

使用EnumProcesses可以輕松實現任務。

這里給出直觀的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM