记录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; }
相关文章推荐
- JS/jquery的一些常用功能函数
- 一些常用的JS功能函数代码
- 记录常用的一些小功能代码
- 一些常用的JS功能函数(2009-06-04更新)
- arx常用的一些函数功能表
- 面向对象的asp编程之三--一些常用的函数
- 记录:一些jquery常用的功能
- C# DllImport的用法 调用Window的一些常用功能
- C# DllImport的用法 调用Window的一些常用功能
- 面向对象的asp编程之四--一些常用的函数
- MFC界面与控件编程常用函数记录
- 面向对象的asp编程之三--一些常用的函数
- 一些常用的JS功能函数(一) (2009-06-04更新)
- javascript的一些常用功能函数
- 一些常用的JS功能函数(2009-06-04更新)
- 面向对象的asp编程之四--一些常用的函数
- arx常用的一些函数功能表 【转】
- PHP 一些常用函数自己记录下。
- 一些常用的JS功能函数(二)(2009-04-24更新)
- 记录一些常用的函数