Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
19 / 20 / 8
Регистрация: 27.11.2010
Сообщений: 323

Получение списка окон созданых процессами

03.11.2012, 15:17. Показов 3139. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно к дереву процессов добавить дерево созданных каждым процессом окон. Вот немного кода
которым я получаю список всех процессов и записываю его в дерево treeView1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TreeNode node = new TreeNode();
            TreeNode node_p = new TreeNode();
            node_p.Nodes.Add("dsad");
            Process[] procList = Process.GetProcesses();
            System.Diagnostics.Process[] processes;
            processes = System.Diagnostics.Process.GetProcesses(); 
            foreach (System.Diagnostics.Process instance in processes)
            {
                node.Nodes.Add("Proc ID: "+instance.Id+" Proc name: "// ид 
                    + instance.ProcessName + " File: " //и имя
                    + instance.StartInfo.FileName + " Razmer: "//файл
                    + instance.PrivateMemorySize);  //размер
            }
            node.Nodes[0].Nodes.AddRange(new TreeNode[] { node_p});
            treeView1.Nodes.Add(node);
создаю node и в него записываю список всех процессов
в node_p я должен записать список окон запущеных процесами помогите реализовать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2012, 15:17
Ответы с готовыми решениями:

Вывод списка окон MDI приложения
Как сделать чтобы в Menu - Windows отображался список дочерних окон ?

Получение списка окон в listbox
вот так получаю список окон в listbox VAR Wnd : hWnd; buff: ARRAY OF Char; begin ListBox1.Clear; // Получаем hWnd...

Получение заголовков окон
Здравствуйте, по таймеру срабатывает следующее событие: wofstream log("log.log", ios::out | ios::app); HWND handle =...

4
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
03.11.2012, 15:32
http://stackoverflow.com/a/2584672

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
namespace ConsoleApplication17
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Text;
 
    internal class Program
    {
        private const uint WM_GETTEXT = 0x000D;
 
        [DllImport( "user32.dll", SetLastError = true )]
        private static extern bool EnumThreadWindows( int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam );
 
        private static IEnumerable<IntPtr> EnumerateProcessWindowHandles( int processId )
        {
            var handles = new List<IntPtr>();
 
            foreach( ProcessThread thread in Process.GetProcessById( processId ).Threads )
            {
                EnumThreadWindows( thread.Id, ( hWnd, lParam ) => {
                                                  handles.Add( hWnd );
                                                  return true;
                                              }, IntPtr.Zero );
            }
 
            return handles;
        }
 
        [DllImport( "user32.dll", CharSet = CharSet.Unicode )]
        private static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam );
 
        [DllImport( "user32.dll", CharSet = CharSet.Unicode )]
        private static extern int GetClassName(
                IntPtr hWnd,
                StringBuilder lpClassName,
                int nMaxCount
                );
 
        private static void Main( string[] args )
        {
            foreach( IntPtr handle in EnumerateProcessWindowHandles( 5376 ) )
            {
                var wndCaption = new StringBuilder( 1000 );
                SendMessage( handle, WM_GETTEXT, wndCaption.Capacity, wndCaption );
 
                var wndClass = new StringBuilder( 255 );
                GetClassName( handle, wndClass, wndClass.Capacity );
 
                Console.WriteLine( "[{0:X8}] '{1}' '{2}'", handle, wndCaption, wndClass );
            }
            Console.ReadLine();
        }
 
        #region Nested type: EnumThreadDelegate
 
        private delegate bool EnumThreadDelegate( IntPtr hWnd, IntPtr lParam );
 
        #endregion
    }
}
Дальше сами допилите?
0
19 / 20 / 8
Регистрация: 27.11.2010
Сообщений: 323
04.11.2012, 00:04  [ТС]
Что то я не впиливаю
ошибки на все скобки и знаки препинания тут
C#
1
2
3
4
 ( hWnd, lParam ) => {
                                                  handles.Add( hWnd );
                                                  return true;
                                              }, IntPtr.Zero );
не может конвертировать к обьекту
C#
1
2
3
var wndCaption = new StringBuilder(1000);
var wndClass = new StringBuilder(255);
Console.WriteLine("[{0:X8}] '{1}' '{2}'", handle, wndCaption, wndClass);
вот собственно весь код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
 
namespace Test_console
{
 
    internal class Program
    {
        private const uint WM_GETTEXT = 0x000D;
 
        [DllImport("user32.dll", SetLastError = true)]
        private static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam);
 
        private static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
        {
            var handles = new List<IntPtr>();
 
            foreach( ProcessThread thread in Process.GetProcessById( processId ).Threads )
            {
                EnumThreadWindows( thread.Id, ( hWnd, lParam ) => {
                                                  handles.Add( hWnd );
                                                  return true;
                                              }, IntPtr.Zero );
            }
 
            return handles;
        }
 
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
 
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        private static extern int GetClassName(
                IntPtr hWnd,
                StringBuilder lpClassName,
                int nMaxCount
                );
 
        private static void Main(string[] args)
        {
            foreach (IntPtr handle in EnumerateProcessWindowHandles(5376))
            {
                var wndCaption = new StringBuilder(1000);
                SendMessage(handle, WM_GETTEXT, wndCaption.Capacity, wndCaption);
 
                var wndClass = new StringBuilder(255);
                GetClassName(handle, wndClass, wndClass.Capacity);
 
                Console.WriteLine("[{0:X8}] '{1}' '{2}'", handle, wndCaption, wndClass);
            }
            Console.ReadLine();
        }
 
        #region Nested type: EnumThreadDelegate
 
        private delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);
 
        #endregion
    }
    
}

пробовал реализовать через winapi но выводит только 1 запись о процессе
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
 
namespace Test_2
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr CreateToolhelp32Snapshot([In]UInt32 dwFlags, [In]UInt32 th32ProcessID);
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32First([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32Next([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
        [DllImport("kernel32", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle([In] IntPtr hObject);
        //inner struct used only internally
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        private struct PROCESSENTRY32
        {
            const int MAX_PATH = 260;
            internal UInt32 dwSize;
            internal UInt32 cntUsage;
            internal UInt32 th32ProcessID;
            internal IntPtr th32DefaultHeapID;
            internal UInt32 th32ModuleID;
            internal UInt32 cntThreads;
            internal UInt32 th32ParentProcessID;
            internal Int32 pcPriClassBase;
            internal UInt32 dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
            internal string szExeFile;
        }
        [Flags]
        public enum SnapshotFlags : uint
        {
            HeapList = 0x00000001,
            Process = 0x00000002,
            Thread = 0x00000004,
            Module = 0x00000008,
            Module32 = 0x00000010,
            All = (HeapList | Process | Thread | Module),
            Inherit = 0x80000000,
            NoHeaps = 0x40000000
 
        }
        public static Process GetParentProcess(int pid)
        {
            Process parentProc = null;
            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32();
                //CreateToolhelp32SnapshotFlags Snap_flags = new CreateToolhelp32SnapshotFlags();
                procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        if (pid == procEntry.th32ProcessID)
                        {
                            parentProc = Process.GetProcessById((int)procEntry.th32ParentProcessID);
                            break;
                        }
                    } while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch { MessageBox.Show("!!!!!!!!!!!!!!!!!!!!!"); }
            finally
            {
                // Must clean up the snapshot object!
                CloseHandle(handleToSnapshot);
            }
            return parentProc;
        }
        public static Process CurrentParentProcess
        {
            get
            {
                return GetParentProcess(Process.GetCurrentProcess().Id);
            }
        }
        private void Form3_Load(object sender, EventArgs e)
        {
            Process pr = CurrentParentProcess;
            Process pro = GetParentProcess;
            label1.Text = "Parent Proc. ID: " + pr.Id + ", Parent Proc. name: " + pr.ProcessName;    
        }
    }
    public class CreateToolhelp32SnapshotFlags
    {
        public const uint TH32CS_SNAPHEAPLIST = 0x00000001;
        public const uint TH32CS_SNAPPROCESS = 0x00000002;
        public const uint TH32CS_SNAPTHREAD = 0x00000004;
        public const uint TH32CS_SNAPMODULE = 0x00000008;
        public const uint TH32CS_SNAPMODULE32 = 0x00000010;
        public const uint TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE);
        public const uint TH32CS_INHERIT = 0x80000000;
    }
}
как получить список с процесами открытыми ими окнами?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
04.11.2012, 03:48
Посмотрите проект.
Вложения
Тип файла: rar EnumProcessWindows.rar (10.2 Кб, 97 просмотров)
0
19 / 20 / 8
Регистрация: 27.11.2010
Сообщений: 323
05.11.2012, 00:30  [ТС]
спасибо проект рабочий но я так понимаю в 2005 студии он не заработает =(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2012, 00:30
Помогаю со студенческими работами здесь

Получение сообщений от любых окон
Можно ли получать сообщения(клики мыши, клавиши) от любых окон? В цикл обработки приходят сообщения только от окна созданного в нём как...

Получение сообщений от дочерних окон
Есть класс создающий дочернее окошко внутри основного окна. Все сообщения внутри Proc- дочернего окна работают но когда посылаю в...

Получение списка полей таблицы и определение первичного ключа из этого списка
Приветствую всех. Долго бьюсь над одной локальной задачей, необходимо извлечь список полей для заданной таблицы и в этом списке указать...

Странные странности. Получение заголовков окон
Странные странности... В потоке получаю список заголовков окон. И если есть конект пишу в бд, если нету пишу в файл. Но почему то работает...

Получение чего-то там окон Windows
Я новичок в WinAPI, не ругайтесь за безграмотность в некоторых аспектах Объясняю сразу как возник вопрос, чтобы было максимально понятно....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru