CreateToolhelp32Snapshot

//c#遍历系统所有进程

[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; } [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); private void button1_Click(object sender, EventArgs e) { IntPtr handle = CreateToolhelp32Snapshot(0x2, 0); if ((int)handle > 0) { List<ProcessEntry32> list = new List<ProcessEntry32>(); 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"); } }

 

//VB获取指定进程模块的基址,调用方法:GetModuleAdd(进程PID,模块名)例如:GetModuleAdd(2284,"GameLogin.dll")

Option Explicit
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private
Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function Module32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function NtUnmapViewOfSection Lib "NTDLL.dll" (ByVal ProcessHandle As Long, ByVal BaseAddress As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Type PROCESSENTRY32 dwSize As Long cntUseage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long swFlags As Long szExeFile As String * 1024 End Type
Private Type MODULEENTRY32 dwSize As Long th32ModuleID As Long th32ProcessID As Long GlblcntUsage As Long ProccntUsage As Long modBaseAddr As Long modBaseSize As Long hModule As Long szModule As String * 256 szExePath As String * 1024 End Type

Public Type THREADENTRY32 dwSize As Long cntusage As Long th32threadID As Long th32OwnerProcessID As Long tpBasePri As Long tpDeltaPri As Long dwFlags As Long End Type

Private Const TH32CS_SNAPPROCESS = &H2 Private Const TH32CS_SNAPmodule = &H8
Public Function GetModuleAdd(PID As Long, ModuleName As String) As Long Dim pr As PROCESSENTRY32 Dim lp As Long Dim mo As MODULEENTRY32 Dim LM As Long Dim i As Long Dim Temp As Variant
If ModuleName = "" Then GetModuleAdd = 0: Exit Function pr.dwSize = Len(pr) LM = CreateToolhelp32Snapshot(TH32CS_SNAPmodule, PID) If LM > 0 Then mo.dwSize = Len(mo) If Module32First(LM, mo) Then Do Temp = Left(mo.szExePath, InStr(mo.szExePath, Chr(0)) - 1) Temp = Mid(Temp, InStrRev(Temp, "\") + 1) If UCase(Temp) = Ucase(ModuleName) Then GetModuleAdd = mo.modBaseAddr Exit Function End If i = i + 1 Loop Until Module32Next(LM, mo) = 0 End If CloseHandle (LM) End If End Function

 

转载于:https://www.cnblogs.com/zzyhost/p/3641680.html

### 回答1: createtoolhelp32snapshot是Windows API中的一个函数,用于创建一个系统进程和模块的快照。它的具体用法是通过调用该函数并传递一个指向PROCESSENTRY32结构的指针来创建快照。这个结构体包含有关进程的信息,例如进程ID,父进程ID,进程名称,线程计数等。这个函数可以帮助开发人员获取有关正在运行的进程的信息,从而进行进程管理和监控。 ### 回答2: CreateToolhelp32Snapshot函数是Windows操作系统提供的一个API函数,位于“kernel32.dll”库中。它被用于获取系统中的进程和线程的快照信息。 这个函数的第一个参数dwFlags用于指定快照的类型,可以是TH32CS_SNAPPROCESS或TH32CS_SNAPTHREAD,分别表示获取进程或者线程的快照。 第二个参数th32ProcessID是要获取快照的目标进程的进程ID,如果传入0,则表示获取系统中所有进程的快照。 使用CreateToolhelp32Snapshot函数可以创建一个系统进程和线程的快照,这个快照包含了这些进程和线程的详细信息,如进程ID、父进程ID、线程ID、模块计数等等。 返回的是一个句柄HANDLE,该句柄可以被Process32First和Process32Next等函数使用,以在快照中遍历获取进程或线程的信息。 使用该API可以方便地获取系统当前运行的进程和线程的信息,进而进行一些系统监视、性能分析或者程序调试的工作。 需要注意的是,通过CreateToolhelp32Snapshot获取的快照信息只是一个静态的快照,也就是说获取到的信息在快照创建时的状态,并不会反映后续的实时变化。如果需要获取实时的进程和线程信息,需要结合其他API函数来实现。 ### 回答3: CreateToolhelp32Snapshot 是一个用于获取系统中进程和模块信息的函数。它是 Windows API 中的一个函数,可用于遍历系统中的进程列表以及每个进程中加载的模块列表。 这个函数的调用需要传入一个表示要获取的信息类型的参数,可以是 TH32CS_SNAPPROCESS 或 TH32CS_SNAPMODULE。当传入 TH32CS_SNAPPROCESS 时,函数将返回一个快照句柄,该句柄可以用于获取系统中所有正在运行的进程的详细信息。当传入 TH32CS_SNAPMODULE 时,函数将返回一个快照句柄,该句柄可以用于获取某个指定进程中加载的所有模块的详细信息。 使用 CreateToolhelp32Snapshot 函数时,我们可以通过调用 Process32First 和 Process32Next 函数来遍历进程列表,获取每个进程的信息。同样,我们可以通过调用 Module32First 和 Module32Next 函数来遍历某个指定进程的模块列表,获取每个模块的详细信息。 需要注意的是,在调用 CreateToolhelp32Snapshot 函数返回快照句柄后,我们可以通过调用 CloseHandle 函数来关闭句柄,释放系统资源。同时,在遍历进程或模块列表时,我们需要逐个使用 CloseHandle 函数关闭每个句柄。 使用 CreateToolhelp32Snapshot 函数可以方便地获取系统中正在运行的进程和每个进程加载的模块的信息,这对于了解系统状态、进行进程监控和调试等操作非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值