在VB中 怎样读取一个进程占多少内存

在VB中 怎样读取一个进程占多少内存,第1张

使用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虚拟机进程内存、请教大神:批处理,定时获取某进程内存等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10159443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存