2016-02-24 30 views
0

編程,我怎樣才能確定3個類別中的Windows 10視窗10:如何確定進程是否是一個應用程序/後臺進程/ Windows進程

  • 應用
  • 後臺進程
  • Windows服務

就像任務管理器?

即我需要一些C#代碼,我可以確定應用程序列表與後臺進程列表。在Win32_process中檢查executionState不起作用。它始終爲空。

謝謝!

enter image description here

+0

獲取後臺進程是比較容易的,但其餘的是大量的工作。這真的是3個問題之一,並且你沒有表現出解決任何問題的任何努力。 –

+1

我試圖使用if(null!= System.Diagnostics.Process.MainWindowTitle)來確定應用程序是否在後臺。然而,它不是它的意思,例如即使我關閉了應用程序,Windows.Mobile.Store(Win10)也將處於掛起狀態 - 後臺進程,並且MainWindowTitle不會爲空。因此不是我想要的結果。 也試過Win32_Process。沒有一個屬性表明該過程是否爲背景。 我只需要區分應用程序與後臺進程。少關心Windows服務。 感謝您的意見和觀察。 – simonso

+0

在WinAPI中,要找到這些應用程序,您可以使用'EnumWindows',然後檢查是否可見窗口,檢查窗口是否爲「alt-tab」窗口,確保窗口不隱藏Windows 10應用程序。 –

回答

1

原題:

  • 如何檢測正在運行的應用程序列表?

我有一個關於解決不同的看法:

一些UWP應用具有主窗口標題。 檢查主窗口標題不足以說明該應用程序正在運行或沒有運行。在暫停狀態仍然會返回標題(見紅色矩形)

enter image description here

所以爲了檢測暫停狀態

UWP應用,我們需要覆蓋

  1. 應用程序有標題但未在前臺運行
  2. 應用程序具有標題但未在後臺運行

{}代碼

static void byProcess() 
    { 
     Process[] processes = Process.GetProcesses(); 
     List<string> suspendedAppsWhichHasTitle = new List<string>(); 

     foreach (var proc in processes) 
     { 
      // if it has main window title 
      if (!string.IsNullOrEmpty(proc.MainWindowTitle)) 
      { 
       // the app may be in suspend state 
       foreach (ProcessThread pT in proc.Threads) 
       { 
        ThreadState ts = pT.ThreadState; 
        if (ts == ThreadState.Running) 
        { 
         suspendedAppsWhichHasTitle.Add(proc.MainWindowTitle); 
        } 
       }      
      } 
     } 

     foreach(string app in suspendedAppsWhichHasTitle) 
     { 
      Console.WriteLine(app); 
     } 

     if (suspendedAppsWhichHasTitle.Count == 0) 
     { 
      Console.WriteLine("No visible app is running!"); 
     } 
     Console.Read(); 
    } 

}

相關問題