vc 获取当前进程所占的内存大小
这个流程是怎么样的,是不是先获得当前进程id,然后根据进程id打开进程,然后在获取该进程所占内存?请问具体都怎么实现,我知道网上介绍用OpenProcess打开进程,但是...
这个流程是怎么样的,是不是先获得当前进程id,然后根据进程id打开进程,然后在获取该进程所占内存?
请问具体都怎么实现,我知道网上介绍用OpenProcess打开进程,但是老是报一些错误“error C2018: unknown character '0xa1'”而且我不知道vc中如何获取当前进程的id.请高手帮帮忙 展开
请问具体都怎么实现,我知道网上介绍用OpenProcess打开进程,但是老是报一些错误“error C2018: unknown character '0xa1'”而且我不知道vc中如何获取当前进程的id.请高手帮帮忙 展开
1个回答
展开全部
你好,你要用VC打开一个进程的话应该先创建后打开
void CSwitchDlg::OnSTB1()
{
PROCESS_INFORMATION pi;
if(OpenSTB(1,&pi)==TRUE)
{
m_List.SetItemText(0,2,_T("关机"));
CString pid;
pid.Format(_T("%d"),pi.dwProcessId);
m_List.SetItemText(0,1,pid.GetBuffer());
m_Btn1.EnableWindow(FALSE);
m_Pid[0]=pi.dwProcessId;
m_hSTB[0]=OpenProcess(PROCESS_QUERY_INFORMATION,0,m_Pid[0]);
}
}
BOOL CSwitchDlg::OpenSTB(int nSTB,PROCESS_INFORMATION* pi)
{
if(!m_Path.GetLength())
{
AfxMessageBox(_T("机顶盒在哪里?请指明路径..."));
return FALSE;
}
STARTUPINFO si;
memset(&si,0,sizeof(si));//若不清0,那么将包含主调线程栈上的垃圾数据
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
CString cmd;
cmd.Format(_T("STB%d"),nSTB);
if(CreateProcess(m_Path, cmd.GetBuffer(),NULL,FALSE,NULL,NULL,NULL,NULL,&si,pi))
{
CloseHandle(pi->hProcess);
CloseHandle(pi->hThread); //关闭到子进程的主线程内核对象的句柄
return TRUE;
}
else
{
MessageBox(_T("打开机顶盒失败,请选择正确的路径"));
return FALSE;
}
}
我这个代码是从一个进程中打开另一个进程。你可以模仿一下 。
下面是遍历系统中正在运行的进程的 代码:
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
//创建进程快照
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL bMore = Process32First(hProcessSnap, &pe32);
//遍历系统中运行的进程
while(bMore)
{
//在这里做你想做的事情
}
void CSwitchDlg::OnSTB1()
{
PROCESS_INFORMATION pi;
if(OpenSTB(1,&pi)==TRUE)
{
m_List.SetItemText(0,2,_T("关机"));
CString pid;
pid.Format(_T("%d"),pi.dwProcessId);
m_List.SetItemText(0,1,pid.GetBuffer());
m_Btn1.EnableWindow(FALSE);
m_Pid[0]=pi.dwProcessId;
m_hSTB[0]=OpenProcess(PROCESS_QUERY_INFORMATION,0,m_Pid[0]);
}
}
BOOL CSwitchDlg::OpenSTB(int nSTB,PROCESS_INFORMATION* pi)
{
if(!m_Path.GetLength())
{
AfxMessageBox(_T("机顶盒在哪里?请指明路径..."));
return FALSE;
}
STARTUPINFO si;
memset(&si,0,sizeof(si));//若不清0,那么将包含主调线程栈上的垃圾数据
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
CString cmd;
cmd.Format(_T("STB%d"),nSTB);
if(CreateProcess(m_Path, cmd.GetBuffer(),NULL,FALSE,NULL,NULL,NULL,NULL,&si,pi))
{
CloseHandle(pi->hProcess);
CloseHandle(pi->hThread); //关闭到子进程的主线程内核对象的句柄
return TRUE;
}
else
{
MessageBox(_T("打开机顶盒失败,请选择正确的路径"));
return FALSE;
}
}
我这个代码是从一个进程中打开另一个进程。你可以模仿一下 。
下面是遍历系统中正在运行的进程的 代码:
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
//创建进程快照
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL bMore = Process32First(hProcessSnap, &pe32);
//遍历系统中运行的进程
while(bMore)
{
//在这里做你想做的事情
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询