你好,你要用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)
{
//在这里做你想做的事情
}
关键的问题是你是需要DLL在目标进程中的基址,而且你自己的写的程序并没有加载那个DLL,所以你总是得到0,所以你需要把自己的程序注入到进程中,才能得到你所要的DLL在目标进程中的基地址。
DLL注入比较常用的方法是利用OpenProcess得到目标进程的句柄,然后利用CreateRemoteThread调用LoadLibrary函数,加载你自己的DLL,在这个DLL的DLLMain里面遍历所有的DLL找到你想要的。这个程序在网上很多,你自己Google就可以找得到了。
以上就是关于vc 获取当前进程所占的内存大小全部的内容,包括:vc 获取当前进程所占的内存大小、如果获取其它进程的DLL内存地址、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)