获取系统进程名时只出现进程名的首字母怎么解决?

来源:互联网 发布:用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来进行打印

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 惹父母生气了该怎么办 小孩戒奶不吃奶粉怎么办 孩子听不进去话怎么办 异性好朋友喜欢自己亲吻自己怎么办 对方对你反感了怎么办 家长偷看孩子日记老师怎么办 儿子与父母相冲怎么办 初二孩子不争气老师打他怎么办? 孩子被老师打又怎么办 家里2个孩子打架怎么办 一年级的学生特别会顶嘴怎么办 私立学校的学生顶嘴老师该怎么办 孩子做错事家长不道歉怎么办 孩孑语文成绩差怎么办 高三了孩子不愿意补课怎么办 四年级的孩子上课喜欢讲小话怎么办 五年级孩子太叛逆怎么办 二年级话唠孩子怎么办 家有老人带孩子怎么办 不会看孩子。孩子一哭就害怕怎么办 孩子不老实爱动怎么办 4周孩子脾气大怎么办 老公脾气暴躁爱骂人怎么办? 当妈妈了脾气不好怎么办 父亲很坏不顾家很会赌钱怎么办 妈妈骂我很难听怎么办 父母管的太严怎么办 2岁宝宝哭闹不止怎么办 8岁儿童叛逆期怎么办 两岁宝宝叛逆期怎么办 4个月小孩哭怎么办 2个月孩子爱哭怎么办 小孩挑衅大人被大人打怎么办 在学校犯了错怎么办 孩子在学校爱捣乱怎么办 小孩老是在学校捣乱怎么办 孩子不听话每天会发火怎么办 孩子不听话控制不住发火怎么办 儿子不听话我总会发火怎么办 小孩好动精力不集中怎么办 孩子好动精力不集中怎么办