2016-03-05 210 views
1

我目前我的所有計算機的運行進程與如何檢查正在運行的進程是否是後臺進程?

Process[] plist = Process.GetProcesses(); 

在那裏檢查哪些進程列表中正在運行的後臺進程沒有什麼好的辦法?

「後臺進程」是指用戶看不到的進程。我試圖使用WindowHandler來檢查它的位置,但是這並沒有這麼做,因爲Windows中的進程可以在WindowHandler設置爲正整數的背景下運行。

+2

你認爲什麼是後臺進程?與任務管理器下的列表相同? – weston

+0

在沒有用戶輸入且屏幕上沒有窗口的情況下在「背景」中運行的進程。所以是的,一個當前正在運行但不可見的進程。 – midnightsyntax

+0

「屏幕上沒有窗口」這樣,最小化的計數? – weston

回答

3

好像檢查窗口風格的伎倆:

public static bool hasWindowStyle(Process p) 
{ 
    IntPtr hnd = p.MainWindowHandle; 
    UInt32 WS_DISABLED = 0x8000000; 
    int GWL_STYLE = -16; 
    bool visible = false; 
    if (hnd != IntPtr.Zero) 
    { 
     UInt32 style = GetWindowLong(hnd, GWL_STYLE); 
     visible = ((style & WS_DISABLED) != WS_DISABLED); 
    } 
    return visible; 
} 

如果返回true:

  • 的過程中沒有對用戶輸入的窗口樣式

我已經做了一些測試,至少現在至少這似乎過濾了幕後運行的流程相當不錯。

我想這隻能在Windows上工作。

+1

是的,你是[不僅允許但鼓勵](http://stackoverflow.com/help/self-answer)回答你自己的問題! (我已經從你的答案中刪除了這句話。) –

+0

很高興知道!並且感謝你:) – midnightsyntax

+0

要編寫與32位和64位版本的Windows兼容的代碼,請使用GetWindowLongPtr代替GetWindowLong。 – vinsa

相關問題