szExeFile PROCESSENTERY32结构给出了一个奇怪的值
szExeFile in PROCESSENTERY32 stucture gives a weird value
>Wen 我尝试列出当前正在运行的进程的所有名称和 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
。因此,PROCESSENTRY32结构中的TCHAR
数组将扩展到wchar_t
数组。对于cout
没有重载,它需要一个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));
}
std::cout
不是为打印wchar_t*
字符串而设计的,而是使用 std::wcout
,或者不使用项目中的多字节和 Unicode 字符串。此外,混合std::wcout
和std::cout
是非法的。
如果要在此代码节中使用ANSI版本的函数,请在名称中添加后缀A
,例如,如果_UNICODE
定义为Process32FirstW
,编译器将更改Process32First
,但可以直接调用Process32FirstA
。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- std::transform 将一个结构数组复制到另一个结构数组
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 如何在级别上打印树,给定一个结构,该结构保存节点的值及其父节点的值,对于树中的每个节点
- 创建一个结构的关联数组,以创建一个缓冲区,供键快速访问
- 如何在另一个结构中初始化结构数组?
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 我想重置一个C++结构统计,我可以以某种方式使用 stat() 语法吗?
- C++可以输出一个结构的内存地址吗
- 通过 C++ 中的另一个结构成员访问结构
- C++ push_back() 一个结构体到一个向量中
- 难以从另一个结构中的函数返回结构
- 如何将向量添加到结构中以创建一个库存系统,在该系统中,我可以仅使用一个结构向系统添加多种不同的葡萄酒
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 将一个结构的值复制到另一个结构
- 是否可以在同一未创建的结构内创建一个结构