您的位置:首页 > 编程语言

记录Window 编程常用的一些小功能函数

2013-10-30 17:38 555 查看
#include <Windows.h>
#include <tlhelp32.h>
#include <Psapi.h>
#include <stdio.h>
#pragma comment(lib,"psapi.lib")

//通过进程名获取PID

bool GetPidByProcessName(char* ProcessName,DWORD &PID)
{
bool ret = false;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hSnap = NULL;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(INVALID_HANDLE_VALUE == hSnap)
{
printf("创建进程快照失败![]\n");
return false;
}
BOOL bMore = Process32First(hSnap,&pe32);
while(bMore)
{
if(stricmp(pe32.szExeFile,ProcessName) == 0)
{
PID = pe32.th32ProcessID;
ret = true;
break;
}
bMore = Process32Next(hSnap,&pe32);
}

return ret;
}

//通过进程名获取全路径]
bool GetPathByProcessName(char* ProcessName,char* FullPath)
{
bool ret = false;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcess = INVALID_HANDLE_VALUE;
HANDLE hSnap = INVALID_HANDLE_VALUE;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(INVALID_HANDLE_VALUE == hSnap)
{
printf("创建进程快照失败!\n");
return false;
}
BOOL bMore = Process32First(hSnap,&pe32);
while(bMore)
{
if(stricmp(pe32.szExeFile,ProcessName) == 0)
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,pe32.th32ProcessID);
if(hProcess == INVALID_HANDLE_VALUE)
{
printf("打开进程PID失败!\n");
}
char Path[256] = {0};
GetModuleFileNameEx(hProcess,NULL,Path,sizeof(Path));
strcpy(FullPath,Path);
ret = true;
break;
}
bMore = Process32Next(hSnap,&pe32);
}

return ret;
}

//通过进程名获取TID
bool GetTidByProcessName(char* ProcessName,DWORD &ThreadId)
{
bool ret = false;
DWORD ProcessId = 0;
HANDLE hProcess = INVALID_HANDLE_VALUE;
THREADENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
GetPidByProcessName(ProcessName,ProcessId);
HANDLE hSnap = INVALID_HANDLE_VALUE;
hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION	| PROCESS_VM_WRITE, FALSE, ProcessId);
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,ProcessId);
if(INVALID_HANDLE_VALUE == hSnap)
{
printf("创建线程快照失败!\n");
return false;
}
BOOL bMore = Thread32First(hSnap,&pe32);
while(bMore)
{
if(pe32.th32OwnerProcessID == ProcessId)
{
ThreadId = pe32.th32ThreadID;
ret = true;
break;
}
bMore = Thread32Next(hSnap,&pe32);
}

return ret;
}

int main()
{
char *ProcessName = "QQ.exe";
char Path[256] = {0};
DWORD PID = 0;
DWORD TID = 0;
GetPidByProcessName(ProcessName,PID);
GetPathByProcessName(ProcessName,Path);
GetTidByProcessName(ProcessName,TID);
printf("PID = %d, Path = %s, TID = %d \n",PID,Path,TID);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: