通过进程名称得进程ID

来源:互联网 发布:手机摄影后期制作软件 编辑:程序博客网 时间:2024/06/05 11:12
#include"stdafx.h"
#include
#include
#include "stdafx.h"  
#include  
#include  

#define STATUS_INFO_LENGTH_MISMATCH ((NTSTAUS)OXC0000004L)
BOOL GetProcessIdByProcessImageName(IN WCHAR*wzProcessImageName,OUT UINT32* TargetProcessId) //IN 从外传入 OUT 从内传出
{
HANDLE ProcessSnapshotHandle = NULL;
PROCESSENTRY ProcessEntry32 = {0};
ProcessEntry32.dwSize = sizeof(PROCESSENTRY32); //必须初始化 
ProcessSnapshotHandle =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统运行的所有进程的快照
if(ProcessSnapshotHandle == INVALID_HANDLE_VALUE)
{
return FALSE;
}
Process32First(ProcessSnapshotHandle,&ProcessEntry32); //将第一个赋给Handle
do
{
if(lstrcmpi(ProcessEntry32.szExeFile,wzProcessImageName)==0) //两者做比较   不区分大小写
{
*TargetProcessId = ProcessEntry32.th32ProcessID;
break;
}
}while(Process32Next(ProcessSnapshotHandle,&ProcessEntry32)); //遍历进程
CloseHandle(ProcessSnapshotHandle);
ProcessSnapshotHandle = NULL;
      return TRUE;
}
---------------------------------------------------------------------------------------------

PROCESSENTRY32   结构如下: 
   
  typedef   struct  tagPROCESSENTRY32     
  DWORD   dwSize;  //   结构大小;    
  DWORD   cntUsage;  //   此进程的引用计数;    
  DWORD   th32ProcessID;  //   进程ID;    
  DWORD   th32DefaultHeapID;  //   进程默认堆ID;    
  DWORD   th32ModuleID;  //   进程模块ID;    
  DWORD   cntThreads;  //   此进程开启的线程计数;    
  DWORD  th32ParentProcessID;//   父进程ID;    
  LONG   pcPriClassBase;  //   线程优先权;    
  DWORD   dwFlags;  //   保留;    
  char  szExeFile[MAX_PATH];   //   进程全名;    
  }  PROCESSENTRY32; 


HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, 
DWORD th32ProcessID );


dwFlags
TH32CS_INHERIT - 声明快照句柄是可继承的。
TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。
TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。
TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。
TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。
TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程。

TH32CS_SNAPALL
Equivalent to specifying TH32CS_SNAPHEAPLIST,TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, and TH32CS_SNAPTHREAD.
TH32CS_SNAPHEAPLIST
Includes the heap list of the specified process in thesnapshot.
TH32CS_SNAPMODULE
Includes the module list of the specified process in thesnapshot.
TH32CS_SNAPPROCESS
Includes the process list in the snapshot.
TH32CS_SNAPTHREAD


BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe );
Parameters
hSnapshot 
Handle to the snapshot returned from a previous call to theCreateToolhelp32Snapshot function. 
lppe 
Pointer to a PROCESSENTRY32 structure. 

上述函数常与
Process32Next(
HANDLE hsnapShot,
LPPROCESSENTRY32 lppe)
搭配使用,用来枚举当前系统快照相关的所有进程。
函数返回值:成功返回true,否则返回false.



int lstrcmpi(
  LPCTSTR lpString1,  //first string
  LPCTSTR lpString2   //second string
);
lpString1 [in] Pointer to the first null-terminated string tobe compared.   
lpString2 [in] Pointer to the second null-terminated string tobe compared. 
Includes the thread list in the snapshot.