通过PID获取进程路径和进程名的两种方法

通过PID获取进程路径和进程名,使用了psapi.h类,获取进程路径,通过_splitpath()函数,获取路径中的文件名。

_splitpath()使用方法:
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );

Return Value
None


Parameters
path
    Full path
drive
    Optional drive letter, followed by a colon (:)
dir
    Optional directory path, including trailing slash. Forward slashes ( / ), backslashes ( \ ), or both may be used.
fname
    Base filename (no extension)
ext
    Optional filename extension, including leading period (.)

#include 
#include 
#include "Psapi.h"
#pragma comment (lib,"Psapi.lib")
using namespace std;


BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName);

void main()
{
	char	path[_MAX_PATH+1]="";
	char	drive[_MAX_DRIVE];
	char	dir[_MAX_DIR];
	char	fname[_MAX_FNAME];
	char	ext[_MAX_EXT];
	DWORD	ProcessID;
	HANDLE	hToken;

	
	//提升程序权限
	OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
	EnablePrivilege(hToken,SE_DEBUG_NAME);
	

	while(1)
	{
		cin>>ProcessID;

		//处理系统函数
		if (ProcessID==4)
		{
			cout<<"system"<



另一种方法是通过tlhelper32.h来获取系统所有进程的快照,从而获取进程名及进程ID(没找到如何通过这种方法获取进程路径)

注:此代码转自  王艳平:Windows程序设计(第二版)

#include "stdafx.h"
#include 
#include  // 声明快照函数的头文件

int main(int argc, char* argv[])
{
	PROCESSENTRY32 pe32;
	// 在使用这个结构之前,先设置它的大小
	pe32.dwSize = sizeof(pe32); 
	
	// 给系统内的所有进程拍一个快照
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		printf(" CreateToolhelp32Snapshot调用失败! \n");
		return -1;
	}
	
	// 遍历进程快照,轮流显示每个进程的信息
	BOOL bMore = ::Process32First(hProcessSnap, &pe32);
	while(bMore)
	{
		printf(" 进程名称:%s \n", pe32.szExeFile);
		printf(" 进程ID号:%u \n\n", pe32.th32ProcessID);

		bMore = ::Process32Next(hProcessSnap, &pe32);
	}

	// 不要忘记清除掉snapshot对象
	::CloseHandle(hProcessSnap);
	return 0;
}




你可能感兴趣的:(编程技术)