设为首页 加入收藏

TOP

VC 枚举进程
2014-11-23 17:59:46 】 浏览:6297
Tags:枚举 进程

有时我们在使用VC开发时,根据需要偶尔需要查看系统当前正在运行中的所有的进程,此时,可以使用VC开发中给我们提供的一种方法――枚举进程,以下介绍两个实例,主要是通过查看网上其他网友的文章,以及在MSDN上面搜索后本人再进行整理得到的历程。具体的话可以查看每个例子给出相应的网站。

以下每个例子都在VC2010测试通过!

第一个例子:给当前系统运行的所有进程“拍个照”,然后逐个将它们打印出

//例程 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686701(v=vs.85).aspx

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; // 枚举当前
      系统中的所有进程 bool ListProcess(); // 枚举某个进程所使用的模块, dwPID 为要检查的进程的进程号 bool ListProcessModules( DWORD dwPID = 0 ); int main() { ListProcess(); //ListProcessModules(5308); return 0; } bool ListProcess() { HANDLE hSnapShot = INVALID_HANDLE_VALUE; PROCESSENTRY32 pe32; pe32.dwSize = sizeof( PROCESSENTRY32 );// 必须加这句 hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); if(hSnapShot == INVALID_HANDLE_VALUE) { cout<<(_T("error!")); return false; } BOOL More; More = ::Process32First(hSnapShot, &pe32); int processNum = 0; while(More) { cout<< "process name: "<
       
       


第二个实例:通过使用EnumProcesses函数来枚举系统当前运行的进程。

// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx
// http://blog.csdn.net/snjdju/article/details/5562409

#include 
        
         
#include 
         
           //#include 
          
            #include 
           
             #include 
            
              using std::cout; using std::endl; HMODULE hPsDll = LoadLibraryA("PSAPI.DLL"); typedef BOOL (_stdcall *ENUMPROCESSES)( //注意这里要指明调用约定为-stdcall LPDWORD pProcessIds, //指向进程ID数组链 DWORD cb, //ID数组的大小,用字节计数 LPDWORD pBytesReturned); //返回的字节 typedef BOOL (_stdcall *ENUMPROCESSMODULES)( HANDLE hProcess, //进程句柄 HMODULE* lphModule, //指向模块句柄数组链 DWORD cb, //模块句柄数组大小,字节计数 LPDWORD lpcbNeeded);//存储所有模块句柄所需的字节数 typedef DWORD (_stdcall *GETMODULEFILENAMEEX)( HANDLE hProcess, //进程句柄 HMODULE hModule, //进程句柄 LPTSTR lpFilename, //存放模块全路径名 DWORD nSize //lpFilename缓冲区大小,字符计算 ); ENUMPROCESSES pEnumProcesses = (ENUMPROCESSES)GetProcAddress(hPsDll, "EnumProcesses"); ENUMPROCESSMODULES pEnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress(hPsDll, "EnumProcessModules"); GETMODULEFILENAMEEX pGetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress(hPsDll, "GetModuleFileNameExA"); //#define EnumProcesses pEnumProcesses bool ListProcessNameAndID(); bool PrintProcessNameAndID(DWORD PID); int main() { ListProcessNameAndID(); return 0; } bool ListProcessNameAndID() { DWORD pProcessesID[1024], cbReturn, cProcessesReturn; if( !::pEnumProcesses(pProcessesID, sizeof(pProcessesID), &cbReturn) ) return false; cProcessesReturn = cbReturn / sizeof(DWORD); size_t i = 0; for( ; i < cProcessesReturn; i++) { PrintProcessNameAndID( pProcessesID[i] ); } cout<
              
              


参考网站:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686701(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx
http://blog.csdn.net/snjdju/article/details/5562409

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC操作INI文件 下一篇[VC++]010菜单命令的路由

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目