Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1636692
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: WINDOWS

2011-04-08 10:50:22

const   char   DESTPROC[19]   =   "cmd.exe";    
DWORD   pid   =   ProcessToPID(DESTPROC);    
返回为0就是没有  


  1. DWORD ProcessToPID(const char *InputProcessName)
  2. {
  3.   DWORD aProcesses[1024], cbNeeded, cProcesses;
  4.   unsigned int i;
  5.   HANDLE hProcess = NULL;
  6.   HMODULE hMod = NULL;
  7.   char szProcessName[MAX_PATH] = "UnknownProcess";

  8.   AddPrivilege(SE_DEBUG_NAME);

  9.   // 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs
  10.   if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
  11.   {
  12.     return 0;
  13.   }

  14.   cProcesses = cbNeeded / sizeof(DWORD);
  15.   // 按有效的PID遍历所有的进程
  16.   for ( i = 0; i < cProcesses; i++ )
  17.   {
  18.     // 打开特定PID的进程
  19.     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
  20.         PROCESS_VM_READ,
  21.         FALSE, aProcesses[i]);
  22.     // 取得特定PID的进程名
  23.     if ( hProcess )
  24.     {
  25.       if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
  26.       {
  27.         GetModuleBaseName( hProcess, hMod,
  28.             szProcessName, sizeof(szProcessName) );
  29.         //将取得的进程名与输入的进程名比较,如相同则返回进程PID
  30.         if(!stricmp(szProcessName, InputProcessName))
  31.         {
  32.           CloseHandle( hProcess );
  33.           return aProcesses[i];
  34.         }
  35.       }
  36.     }//end of if ( hProcess )
  37.   }//end of for
  38.   //没有找到相应的进程名,返回0
  39.   CloseHandle( hProcess );
  40.   return 0;
  41. }



也可以枚举得到所有进程的应用程序名,然后和知道应用程序名比较判断。




  1. DWORD GetProcessidFromName(LPCTSTR name)
  2. {
  3.   PROCESSENTRY32 pe;
  4.   DWORD id=0;
  5.   HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  6.   pe.dwSize=sizeof(PROCESSENTRY32);
  7.   if(!Process32First(hSnapshot,&pe))
  8.     return 0;
  9.   while(1)
  10.   {
  11.     pe.dwSize=sizeof(PROCESSENTRY32);
  12.     if(Process32Next(hSnapshot,&pe)==FALSE)
  13.       break;
  14.     if(strcmp(pe.szExeFile,name)==0)
  15.     {
  16.       id=pe.th32ProcessID;

  17.       break;
  18.     }


  19.   }
  20.   CloseHandle(hSnapshot);
  21.   return id;
  22. }


阅读(9855) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~