Aϟϟ*_*RIX 0 c++ winapi process visual-studio visual-c++
我尝试列出当前正在运行的进程的所有名称和 ID 当我尝试计算进程的 szExeFile 时,我得到了一些奇怪的结果。这是我得到的:
Process name: 005BF3EC and id: 0
Process name: 005BF3EC and id: 4
Process name: 005BF3EC and id: 392
Process name: 005BF3EC and id: 508
Process name: 005BF3EC and id: 588
Process name: 005BF3EC and id: 596
Process name: 005BF3EC and id: 648
Process name: 005BF3EC and id: 684
Run Code Online (Sandbox Code Playgroud)
这是代码:
HANDLE ProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = {0};
pe.dwSize = sizeof(PROCESSENTRY32);
if (ProcSnap == INVALID_HANDLE_VALUE) {
cout << "Can't make a snapshot" << endl;
}
Process32First(ProcSnap, &pe);
do {
cout << "Process name: " <<pe.szExeFile<< " and id: " << pe.th32ProcessID << endl;
} while (Process32Next(ProcSnap, &pe));
Run Code Online (Sandbox Code Playgroud)
您已在项目设置中定义了UNICODE/ _UNICODE。的TCHAR在阵列PROCESSENTRY32因此结构膨胀到wchar_t阵列。没有重载couta const wchar_t*,因此它使用通用指针实现,并显示指针值。
你应该std::wcout改用。
注意:虽然可以调用 API 的 ANSI 版本,但保留这些只是为了与 Win9x 兼容。它们执行有损转换,从 ANSI 到 Unicode(反之亦然),并且浪费资源。除非有真正的理由调用 ANSI 版本,否则不要调用。
固定代码:
HANDLE ProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (ProcSnap == INVALID_HANDLE_VALUE) {
wcout << L"Can't make a snapshot" << endl;
}
PROCESSENTRY32W pe = {0};
pe.dwSize = sizeof(pe);
if (Process32FirstW(ProcSnap, &pe)) {
do {
wcout << L"Process name: " << pe.szExeFile
<< L" and id: " << pe.th32ProcessID << endl;
} while (Process32NextW(ProcSnap, &pe));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2675 次 |
| 最近记录: |