获取系统进程名时只出现进程名的首字母怎么解决?
来源:互联网 发布:用visio画网络拓扑图 编辑:程序博客网 时间:2024/04/27 17:07
关键语句: printf("进程名称:%s\n",pe32.szExeFile);结果是输出进程名的首字母,如进程QQ,其值输出Q;
解决办法: printf("进程名称:%ws\n",pe32.szExeFile);即可。
原因:
1、源程序:
#include <windows.h>//系统会自动连接到指定的库文件lib
#include <tlhelp32.h>//声明快照函数的头文件
#include <stdio.h>//std io 标准输入输出接口
#include <iostream>
using namespace std;
int main()
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);//结构大小
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//使用CreateToolhelp32Snapshot()创建系统快照句柄
//(hprocess是我们声明用来保存创建的快照句柄),0表示当前进程
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot调用失败");
return -1;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
int i = 0;
while(bMore)
{
cout << "i = " << i << endl;
printf("进程名称:%ws\n",pe32.szExeFile);
i++;
cout << "i = " << i << endl;
printf("进程ID:%u\n\n",pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap,&pe32);
}
char a;
cin>>a;
::CloseHandle(hProcessSnap);
return 0;
}
2、没分清楚unicode和ansi字符,Unicode字符全部双字节,ansi里的单字节字符到unicode里高位补0,再用ansi函数调用自然就只剩首字符了,unicode串直接用printf和%s给输出了
3、pe32.szExeFile是TCHAR结构,它在TCHAR.h文件中定义,如果定义的是__UNICODE则是wchar结构,用了unicode字符才造成这种那个结果,此时pe32.szExeFile为双字节的,存放一个英文字母,第一位就是anis字母的值,第2位为00,所以用%s打印只会出现进程名字第一位,要用%ws来进行打印
- 获取系统进程名时只出现进程名的首字母怎么解决?
- 系统进程中w3wp.exe的问题怎么解决?
- 根据Handle获取进程名的方法
- Android获取组件的进程名
- 获取进程名的两种方法
- 获取当前运行的进程名?
- vc怎样通过进程名获取进程的工作目录.
- 通过进程名获取进程的工作目录
- 进程名与进程号的对应关系获取
- 由进程名获取进程ID的方法及实现
- 如何通过进程pid获取进程名、可执行文件的名称
- 根据进程ID获取进程名的方式
- 解决5.0获取系统中运行进程
- 如何获取某个进程的主窗口以及创建进程的程序名(进程映像名)
- 获取进程名,获取进程路径,获取当前进程的窗口句柄。
- 获取系统的进程信息
- 通过获取系统进程快照获取进程pid以及杀进程(win下获取进程名和linux下获取进程路径)
- 通过进程名获取进程PID
- NSNotificationCenter通知中心
- <JAVA> 构造函数-->特权
- 利用Google Custom Search API抓取google搜索内容
- MFC多线程
- ViewPager实现滑动切换标签页
- 获取系统进程名时只出现进程名的首字母怎么解决?
- Photoshop脚本 > 同时创建多个选区
- ORA-00031-标记要终止的会话,在OS一级杀掉进程
- Fibonacci
- 零件热处理工艺的编制包括以下几个方面
- 第十三周项目1-数组大折腾(二)
- 编译Coco2d-x android 程序出现make: *** No rule to make target ...CCConfiguration.o'. Stop.
- static关键字
- 第十三周 项目三:成绩处理函数版