使用API函数
ReadProcessMemory
原型:
Private
Declare
Function
ReadProcessMemory
Lib
"kernel32"
(ByVal
hProcess
As
Long,
ByVal
lpBaseAddress
As
Any,
ByVal
lpBuffer
As
Any,
ByVal
nSize
As
Long,
lpNumberOfBytesWritten
As
Long)
As
Long
说明:
ByVal
hProcess
As
Long,
是打开的进程的句柄
ByVal
lpBaseAddress
As
Any,
是进程的地址
ByVal
lpBuffer
As
Any,
是数据的存放地址
ByVal
nSize
As
Long,
是你想要读取的数据的长度
lpNumberOfBytesWritten
As
Long
是实际读取的数据的长度
使用pmappid命令。vm虚拟机官网显示,可以使用pmappid命令来进行读取vm虚拟机进程内存,它会把虚拟内存各段的占用情况从低地址到高地址都列出来。VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。
可以这样,先把下面的批处理存为myprocessmonitorbat
@echo off
@set prc_name=cmdexe
@echo ---------------%date% %time%----------------- >> prc_monlog
@for /f "tokens=5,6 delims= " %%i in ('tasklist ^|find "%prc_name%"') do @echo %prc_name% use memory %%i%%j>> prc_monlog
@echo -------------------------------------------------- >> prc_monlog
@echo >>prc_monlog
把这个文件放在您指定的一个文件夹里,每次运行都会向prc_monlog中生成一条记录。
然后再把该批处理添加到计划任务中,设置您需要的时间间隔即可。
也可以用批处理自己写定时器,但不建议,特别是长期执行的任务,一来不稳定,二来占资源。
如果你不是要编程的话,用WinHex或者任何一款游戏修改器(Game Master,FPE,金山游侠等)都可以。
如果你是指编程,用API函数ReadProcessMemory/WriteProcessMemory。
你好,你要用VC打开一个进程的话应该先创建后打开
void
CSwitchDlg::OnSTB1()
{
PROCESS_INFORMATION
pi;
if(OpenSTB(1,&pi)==TRUE)
{
m_ListSetItemText(0,2,_T("关机"));
CString
pid;
pidFormat(_T("%d"),pidwProcessId);
m_ListSetItemText(0,1,pidGetBuffer());
m_Btn1EnableWindow(FALSE);
m_Pid[0]=pidwProcessId;
m_hSTB[0]=OpenProcess(PROCESS_QUERY_INFORMATION,0,m_Pid[0]);
}
}
BOOL
CSwitchDlg::OpenSTB(int
nSTB,PROCESS_INFORMATION
pi)
{
if(!m_PathGetLength())
{
AfxMessageBox(_T("机顶盒在哪里?请指明路径"));
return
FALSE;
}
STARTUPINFO
si;
memset(&si,0,sizeof(si));//若不清0,那么将包含主调线程栈上的垃圾数据
sicb=sizeof(si);
siwShowWindow=SW_SHOW;
sidwFlags=STARTF_USESHOWWINDOW;
CString
cmd;
cmdFormat(_T("STB%d"),nSTB);
if(CreateProcess(m_Path,
cmdGetBuffer(),NULL,FALSE,NULL,NULL,NULL,NULL,&si,pi))
{
CloseHandle(pi->hProcess);
CloseHandle(pi->hThread);
//关闭到子进程的主线程内核对象的句柄
return
TRUE;
}
else
{
MessageBox(_T("打开机顶盒失败,请选择正确的路径"));
return
FALSE;
}
}
我这个代码是从一个进程中打开另一个进程。你可以模仿一下
。
下面是遍历系统中正在运行的进程的
代码:
PROCESSENTRY32
pe32;
pe32dwSize
=
sizeof(pe32);
//创建进程快照
HANDLE
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
BOOL
bMore
=
Process32First(hProcessSnap,
&pe32);
//遍历系统中运行的进程
while(bMore)
{
//在这里做你想做的事情
}
windows每个进程都有自己的地址空间。openprocess打开进程,readprocessmemory读进程数据,writeprocessmemory写进程数据。难点在于找到你想读的数据在进程地址空间中的偏移即相对地址
以上就是关于在VB中 怎样读取一个进程占多少内存全部的内容,包括:在VB中 怎样读取一个进程占多少内存、读取vm虚拟机进程内存、请教大神:批处理,定时获取某进程内存等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)