Получение списка окон созданых процессами - 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;
}
}