показать запущенные приложения (список программ alt-tab)

Нашел решение здесь: http://blogs.msdn.com/b/oldnewthing/archive/2007/10/08/5351207.aspx


Пытаюсь просмотреть список запущенных приложений, на нескольких форумах нашел это решение:

Process[] processes = Process.GetProcesses();
foreach (var proc in processes)
{
     if (!string.IsNullOrEmpty(proc.MainWindowTitle))
        Console.WriteLine(proc.MainWindowTitle);
}

за исключением того, что это не дает мне того же списка, что и при нажатии alt-tab. Например: firefox, explorer и iexplore возвращают пустой / нулевой MainWindowTitle. Есть ли другой способ получить доступ к этому списку? Может быть, через windowsAPI?

Я использую Windows 7 32bit

Заранее благодарю.


person JSK    schedule 29.11.2011    source источник
comment
eggheadcafe.com/tutorials/csharp/ это может вам помочь   -  person Kemal Can Kara    schedule 29.11.2011
comment
возможный дубликат Перечислить окна, как это делает alt-tab   -  person Christian.K    schedule 29.11.2011
comment
Также см. принятый ответ, который ссылается на запись в блоге Раймонда Чена, в которой приведены подробности.   -  person Christian.K    schedule 29.11.2011


Ответы (2)


В Windows нет скрытых процессов. Только процессы, на просмотр которых у вас нет прав (безопасности).

взгляните на нижеприведенное:

Получить полный список процессов с помощью C #

person Massimiliano Peluso    schedule 29.11.2011
comment
Я вижу все процессы, но не могу восстановить mainwindowtitle. - person JSK; 29.11.2011

Попробуйте это (взято из здесь), но я не уверен, что это решит вашу проблему:

static void Main(string[] args)
{
    GetProcesses();
    GetApplications();
    Console.Read();
}
public static void GetProcesses()
{
    StringBuilder sb = new StringBuilder();
    ManagementClass MgmtClass = new ManagementClass("Win32_Process");

    foreach (ManagementObject mo in MgmtClass.GetInstances())           
        Console.WriteLine("Name:" + mo["Name"] + "ID:" + mo["ProcessId"]);               

    Console.WriteLine();
}

public static void GetApplications()
{
    StringBuilder sb = new StringBuilder();
    foreach (Process p in Process.GetProcesses("."))
        try
        {
            if (p.MainWindowTitle.Length > 0)
            {
                Console.WriteLine("Window Title:" + p.MainWindowTitle.ToString());
                Console.WriteLine("Process Name:" + p.ProcessName.ToString());
                Console.WriteLine("Window Handle:" + p.MainWindowHandle.ToString());
                Console.WriteLine("Memory Allocation:" + p.PrivateMemorySize64.ToString());                     
            }
        }
        catch { }
}
person Marco    schedule 29.11.2011
comment
Спасибо, но мою проблему это не решает. Я вижу все процессы, но функция getapplications дает мне только одну запущенную программу (свой собственный процесс). - person JSK; 29.11.2011