【发布时间】:2014-03-18 09:38:25
【问题描述】:
我下面的程序会将进程的名称连接到names 字符串中。如何更改它以包含进程 ID 而不是名称? names 应该是什么类型,如何初始化它以及如何连接其中的每个proc32.th32ProcessID?
PROCESSENTRY32 proc32;
TCHAR names[MAX_PATH]=L"";
if(hSnap == INVALID_HANDLE_VALUE)
{
cout<<"invalid handle value error!\n";
return;
}
proc32.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(hSnap, &proc32))
{
cout<<"Tread32First() error!\n";
CloseHandle(hSnap);
return ;
}
do
{
//cout<<"Current process id: "<<GetCurrentProcessId()<<"\n";
wcout<<L"Process Name: "<<proc32.szExeFile<<"\n";
cout<<"Process ID: " <<proc32.th32ProcessID<<"\n";
cout<<"Thread Count: "<<proc32.cntThreads<<"\n"<<endl;
lstrcat(names, proc32.szExeFile);
lstrcat(names, L"\n");
}while(Process32Next(hSnap, &proc32));
【问题讨论】:
-
这不是 C,而是 C++。所以请使用
std::string或std::wstring。 -
更具体地说明 David 的意思:使用
std::basic_string<TCHAR>代替names,这样您就可以轻松连接字符串,而不必担心数组大小。 -
认真的吗?你读过代码吗,尤其是它两次打印出进程id,并将进程id与当前进程id进行比较的部分?
-
我这样做是为了排除当前的 id。每次都会打印它,实际上但已经从我的原始程序中排除了该部分。介意给我看一个@MicroVirus 的例子吗?我有点困惑。
标签: c++ winapi process tchar dword