VB读取线程、句柄及写入内存的API代码实例
作者:WarmHope
时间:2026-06-29
浏览:0
演示了一套VB通过API读取线程、句柄及写入内存的实用代码,核心函数包括ReadProcessMemory、WriteProcessMemory和VirtualAllocEx,并涵盖窗口句柄获取、线程ID提取、进程打开与释放等基础API,完整覆盖进程操作全链路,适用于系统调试与辅助工具开发。
这里演示一套 VB 通过 API 读取线程、句柄以及写入内存的实用代码。如果你对系统底层编程感兴趣,这套接口非常值得收藏。通过它,可以获取到目标线程 ID,向指定进程写入内存,或者从进程内存中读取数据。核心函数包括:ReadProcessMemory 用于读取进程内存,WriteProcessMemory 用于写入,VirtualAllocEx 负责在目标进程内分配内存。代码中还包含了窗口句柄获取、线程 ID 提取、进程打开与释放等基础 API,覆盖了进程操作的全链路。

废话不多说,直接上代码:
Attribute VB_Name = "API" Option Explicit Public Declare Function GetDesktopWindow Lib "User32.DLL" () As Long Public Declare Function FindWindow Lib "User32.DLL" Alias "FindWindowA" (ByVal ClassName As String, ByVal Caption As String) As Long Public Declare Function GetWindow Lib "User32.DLL" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Public Declare Function GetWindowText Lib "User32.DLL" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Const GW_CHILD = (5) Public Const GW_HWNDNEXT = (2) Public Declare Function GetWindowThreadProcessId Lib "User32.DLL" (ByVal hwnd As Long, ProcessId As Long) As Long '取找线程ID(句柄,返回的线程ID) Public Declare Function OpenProcess Lib "Kernel32.DLL" (ByVal 操作权限 As Long, ByVal 继承句柄 As Long, ByVal 线程ID As Long) As Long Public Declare Function ReadProcessMemory Lib "Kernel32.DLL" (ByVal 进程柄 As Long, ByVal 内存位置 As Long, 缓冲区 As Any, ByVal 长度 As Long, lpNumberOfBytesWritten As Long) As Long '读取进程(进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度[0]) Public Declare Function WriteProcessMemory Lib "Kernel32.DLL" (ByVal 进程柄 As Long, 内存位置 As Any, 缓冲区 As Any, ByVal 长度 As Long, lpNumberOfBytesWritten As Long) As Long '写内存(进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度[0]) Public Declare Function CloseHandle Lib "Kernel32.DLL" (ByVal 进程柄 As Long) As Long '释放(进程句柄)'不释放会出错 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const SYNCHRONIZE = &H100000 Public Const RRAD_WRITE = &H1F0FFF Public Const PROCESS_VM_OPERATION = &H8& Public Const 读取 = &H10& Public Const 写入 = &H20& '---------变量转换API Public Declare Sub MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (变量1 As Any, 变量2 As Any, ByVal 长度 As Long) '---------内存保护分配释放 Public Declare Function VPE Lib "Kernel32.DLL" Alias "VirtualProtectEx" (ByVal 进程柄 As Long, 地址 As Any, ByVal 长度 As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long Public Declare Function VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" (ByVal 进程柄 As Long, ByVal 地址 As Long, ByVal 长度 As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long '内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址 Public Declare Function VFE Lib "Kernel32.DLL" Alias "VirtualFreeEx" (ByVal 进程柄 As Long, ByVal 地址 As Long, ByVal 长度 As Long, ByVal 释放类型 As Long) As Long Public Const MEM_COMMIT = &H1000 Public Const PAGE_READWRITE = &H4 Public Const STILL_ACTIVE = &H103& Public Const INFINITE = &HFFFF '---------取模块函数位置API Public Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" (ByVal ModuleName As String) As Long Public Declare Function LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" (ByVal ModuleName As String) As Long Public Declare Function GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) As Long Public Declare Function CreateRemoteThread Lib "Kernel32.DLL" (ByVal 进程柄 As Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long Public Declare Function GetTickCount Lib "kernel32" () As Long
作者最新文章
Photoshop图层阵列怎么做?复制多个图层并整齐排列
2026-09-22 16:42
3dmax动画技巧总结:动画制作步骤与渲染视频教程
2026-09-22 14:47
思源笔记
2026-09-16 17:42
在线PDF转TXT操作步骤与乱码排查指南
2026-09-04 13:02
PDF加水印后如何检查显示效果?在线工具操作步骤与避坑指南
2026-09-03 13:02
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































