首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

作实验项目任务管理器时好多进程信息无法获得

2013-12-20 
做实验项目任务管理器时好多进程信息无法获得我在列表框里显示进程名字,ID,用户名及内存占用,就像windows

做实验项目任务管理器时好多进程信息无法获得
我在列表框里显示进程名字,ID,用户名及内存占用,就像windows的一样,但很多进程的信息获取不了
DWORD dwCount=0;  
    PWTS_PROCESS_INFO pi={0};  
    int i=0;  
    DWORD dwSize=0;  
    char username[128]={0};  
    SID_NAME_USE nameuse = SidTypeUser;
CString str;
m_ctllist.DeleteAllItems();
    if( WTSEnumerateProcesses(NULL, 0, 1, &pi, &dwCount) ) {  
        for( i = 0; i < dwCount; i++ ) 
{  
            m_ctllist.InsertItem(i,pi[i].pProcessName);
str.Format(_T("%d"),pi[i].ProcessId);
            m_ctllist.SetItemText(i,1,str);
            memset( username, 0, sizeof(char) * 128 );  
            dwSize = 128;
            if( LookupAccountSid(NULL, pi[i].pUserSid, username, &dwSize, NULL, &dwSize, &nameuse) )  
m_ctllist.SetItemText(i,2,username);  
            else
m_ctllist.SetItemText(i,2,"system");
HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pi[i].ProcessId);
PROCESS_MEMORY_COUNTERS pmc;
GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc));
str.Format("%d",pmc.WorkingSetSize);
m_ctllist.SetItemText(i,3,str);
        }  
    }    
    WTSFreeMemory(pi);
LookupAccountSid函数在获取用户名时无法得到属于系统进程的用户名,像SYSTEM之类,所以我只能把得不到的都写成system。
更郁闷的是GetProcessMemoryInfo函数也获取不了很多进程的内存占用,有些不属于系统进程的都得不到,请问高手这是为什么呢,我试过关掉360也不行
[解决办法]
权限不够,以管理员权限运行。

同时为了兼容64位下建议使用。

调用GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用

热点排行