您的位置:首页 > 编程语言 > C#

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;

};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: