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
这是代码:
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));
您已在项目设置中定义了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));
}
| 归档时间: | 
 | 
| 查看次数: | 2675 次 | 
| 最近记录: |