Получение списка окон созданых процессами - C#
Формулировка задачи:
Мне нужно к дереву процессов добавить дерево созданных каждым процессом окон. Вот немного кода
которым я получаю список всех процессов и записываю его в дерево treeView1
создаю node и в него записываю список всех процессов
в node_p я должен записать список окон запущеных процесами помогите реализовать
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);
Решение задачи: «Получение списка окон созданых процессами»
textual
Листинг программы
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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д