MFC如何获取像任务管理器一样的数据-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

MFC如何获取像任务管理器一样的数据

2016-03-23 13:38:03 1927 1

按照网络上面的一些资源,我已经可以获得了进程的pid和进程名称,不过进程名称是英文的,
然后获取文件路径的时候也只能获得部分文件的路径,screenshot
screenshot

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:10:47
     #include <TlHelp32.h>
    #include <pdh.h>
    #pragma comment(lib,"pdh.lib")
    #include <PSAPI.H>
    #pragma comment(lib,"psapi.lib")
    // 返回指定进程的句柄数
    BOOL EnableDebugPrivilege(BOOL fEnable)
    {
     BOOL fOK = FALSE;
     HANDLE hToken = NULL;
     if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)){
      TOKEN_PRIVILEGES tp;
      tp.PrivilegeCount =1;
      LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
      tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
      AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
      fOK = (GetLastError()==ERROR_SUCCESS);
      CloseHandle(hToken);
     }
     return fOK;
    }
    DWORD GetProcHandleCount(HANDLE hProcess)
    {
     if(!EnableDebugPrivilege(TRUE))
     {
      return 0;
     }
     HANDLE hQuery=NULL;
     PdhOpenQuery(NULL,0,&hQuery);
     if(NULL==hQuery)
     {
      return 0;
     }
     HANDLE hCounter=NULL;
     char szProcessName[MAX_PATH] = "unknown";
     HMODULE hMod=NULL;
     GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
     char szName[MAX_PATH]="";
     _tsplitpath(szProcessName,NULL,NULL,szName,NULL);
     char szCounterPath[MAX_PATH]="";
     sprintf(szCounterPath,"\\Process(%s)\\Handle Count",szName);
     PdhAddCounter(hQuery,szCounterPath,0,&hCounter);
     if(NULL==hCounter || INVALID_HANDLE_VALUE==hCounter)
     {
      PdhCloseQuery(hQuery);
      return 0;
     }
     DWORD nHandles=0;
     if(ERROR_SUCCESS==PdhCollectQueryData(hQuery))
     {
      PDH_FMT_COUNTERVALUE      pdhfmtHandles; 
      if(ERROR_SUCCESS==PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &pdhfmtHandles))
       nHandles = DWORD(pdhfmtHandles.longValue);  
     }  
     if(NULL!=hCounter && INVALID_HANDLE_VALUE!=hCounter)
      PdhRemoveCounter(hCounter);
     if(NULL!=hQuery && INVALID_HANDLE_VALUE!=hQuery)
      PdhCloseQuery(hQuery);
     EnableDebugPrivilege(FALSE);
     return nHandles;
    }
    
    0 0
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载