C#中利用CreateToolhelp32Snapshot遍历系统进程
2010-05-25 05:25
447 查看
private void button1_Click(object sender, EventArgs e)
{
IntPtr handle=CreateToolhelp32Snapshot(0x2, 0);
if ((int)handle > 0)
{
ProcessEntry32 pe32 = new ProcessEntry32();
pe32.dwSize = (uint)Marshal.SizeOf(pe32);
int bMore = Process32First(handle, ref pe32);
while (bMore == 1)
{
IntPtr temp = Marshal.AllocHGlobal((int)pe32.dwSize);
Marshal.StructureToPtr(pe32, temp, true);
ProcessEntry32 pe=(ProcessEntry32)Marshal.PtrToStructure(temp, typeof(ProcessEntry32));
Marshal.FreeHGlobal(temp);
list.Add(pe);
bMore = Process32Next(handle, ref pe32);
}
CloseHandle(handle);
foreach(ProcessEntry32 p in list)
richTextBox1.AppendText(p.szExeFile+"/r/n");
}
}
[DllImport("KERNEL32.DLL ")]
public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid);
[DllImport("KERNEL32.DLL ")]
public static extern int CloseHandle(IntPtr handle);
[DllImport("KERNEL32.DLL ")]
public static extern int Process32First(IntPtr handle, ref ProcessEntry32 pe);
[DllImport("KERNEL32.DLL ")]
public static extern int Process32Next(IntPtr handle, ref ProcessEntry32 pe);
}
=========================================================================
[StructLayout(LayoutKind.Sequential)]
public struct ProcessEntry32
{
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public IntPtr th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public int pcPriClassBase;
public uint dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
public string szExeFile;
};
}
{
IntPtr handle=CreateToolhelp32Snapshot(0x2, 0);
if ((int)handle > 0)
{
ProcessEntry32 pe32 = new ProcessEntry32();
pe32.dwSize = (uint)Marshal.SizeOf(pe32);
int bMore = Process32First(handle, ref pe32);
while (bMore == 1)
{
IntPtr temp = Marshal.AllocHGlobal((int)pe32.dwSize);
Marshal.StructureToPtr(pe32, temp, true);
ProcessEntry32 pe=(ProcessEntry32)Marshal.PtrToStructure(temp, typeof(ProcessEntry32));
Marshal.FreeHGlobal(temp);
list.Add(pe);
bMore = Process32Next(handle, ref pe32);
}
CloseHandle(handle);
foreach(ProcessEntry32 p in list)
richTextBox1.AppendText(p.szExeFile+"/r/n");
}
}
[DllImport("KERNEL32.DLL ")]
public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid);
[DllImport("KERNEL32.DLL ")]
public static extern int CloseHandle(IntPtr handle);
[DllImport("KERNEL32.DLL ")]
public static extern int Process32First(IntPtr handle, ref ProcessEntry32 pe);
[DllImport("KERNEL32.DLL ")]
public static extern int Process32Next(IntPtr handle, ref ProcessEntry32 pe);
}
=========================================================================
[StructLayout(LayoutKind.Sequential)]
public struct ProcessEntry32
{
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public IntPtr th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public int pcPriClassBase;
public uint dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
public string szExeFile;
};
}
相关文章推荐
- Wpf 遍历系统进程 C#
- C#遍历系统进程的方法
- 实现记录和查看用户的系统登录和退出历史和利用C#编写的网络聊天程序
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- c# wcf NetNamePipeBinding 实现同一系统上不同进程之间的通信
- 遍历系统中的所有进程,根据szName杀死指定的程序
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- proc文件系统_每进程信息形成原理、目录遍历方式、位图查找
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- Android 进程常驻(2)----细数利用android系统机制的保活手段
- C#利用DirectoryInfo遍历文件夹所有文件的类
- 编写模块遍历系统中的进程(续)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 编写模块遍历系统中的进程
- 通过linux系统宏定义,遍历系统中的进程
- C#得到系统进程和结束某个指定的进程
- [C#(WebForm)] - 利用递归遍历文件夹和文件存入TreeView
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- C#得到系统进程和结束某个指定的进程