为了省去自己注册窗口类,创建窗口类可以直接使用Windows提供的API 函数:DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);
//注册快捷键 F1
RegisterHotKey(hwnd, 1, 0, VK_F1); //注册热键的系统API ,详细定义见MSDN;
获取系统进程常用API:
CreateToolhelp32Snapshot()
Process32First()
Process32Next()
首先通过创建系统快照,然后通过函数Frist定位到需要获取的进程列表,最后通过Next 遍历一个个把列表值取出;
#include "stdafx.h" #include "CprocessInfo.h" #include "tlhelp32.h" CprocessInfo::CprocessInfo() //构造函数 { m_dwPid = 0; m_hProcess = NULL; } CprocessInfo::~CprocessInfo() //析构函数 { } /************************************************************************/ /* 功能:遍历寻找进程 返回值: 进程ID */ /************************************************************************/ DWORD CprocessInfo::MyFindProcess(PTCHAR pNameBuffer) { //创建一个系统快照,第二个参数如果是模块或者线程的快照,则需要填写该进程的PID,全局返回则填0; //调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。 //TH32CS_SNAPPROCESS把系统全部进程拍出来 HANDLE hHand = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)用来 Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32中。用Process32Next指向下一条进程信息。 PROCESSENTRY32 processInfo = { 0 }; processInfo.dwSize = sizeof(PROCESSENTRY32);//必填项,否则无法区分新旧机器,返回失败 //process32First是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后, //我们可以利用process32First函数来获得第一个进程的句柄。 //返回信息全在processInfo结构体当中 //和Process32Next是一个组合,Process32First觉得去哪拿,Process32Next把其他都拿出来 Process32First(hHand, &processInfo); //通过一个循环使用Process32Next,把所有进程读取出来 do { //通过对比字符串来判断是否当前进程已经获取,szExeFile进程全名; if (!_tcscmp(pNameBuffer, processInfo.szExeFile)) { CloseHandle(hHand);//获取的句柄不用一定要关闭,否则会内存泄漏 m_dwPid = processInfo.th32ProcessID; return m_dwPid; } } while (Process32Next(hHand, &processInfo)); CloseHandle(hHand);//获取的句柄不用一定要关闭,否则会内存泄漏 return 0; }
// Win32Project1.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "Win32Project1.h" /************************************************************************/ /* 全局变量 */ /************************************************************************/ DWORD g_dwHotKetVule = 0; CprocessInfo g_ProcessInfo = {}; INT_PTR CALLBACK DialogProc( HWND hwndDlg, UINT UMsg, WPARAM wParam, LPARAM lParam ); int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc); } /************************************************************************/ /* 命令处理 */ /************************************************************************/ INT_PTR CALLBACK DialogProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: //窗口初始化 InitDialog(hwnd); break; case WM_CLOSE: //窗口关闭处理 EndDialog(hwnd, 0); return true; case WM_COMMAND: //命令 switch (LOWORD( wParam)) { case IDC_BUTTON_BOUND: BindGameProcess(TEXT("hl2.exe")); break; case IDC_BUTTON_VIEW: break; case IDC_BUTTON_SPEED: break; default: break; } break; case WM_HOTKEY: //拦截热键消息 OnHotKey(hwnd, wParam, lParam); break; default: break; } return FALSE; } /************************************************************************/ /* 初始化 */ /************************************************************************/ BOOL InitDialog(HWND hwnd) { //注册快捷键 F1 RegisterHotKey(hwnd, 1, 0, VK_F1); //注意这里填写的热键标识符1,判断的时候也是判断标识符 return FALSE; } /************************************************************************/ /* 热键处理 */ /************************************************************************/ DWORD OnHotKey(HWND hwnd, WPARAM wParam, LPARAM lParam) { switch (wParam) { case 1: MessageBox(0, TEXT("f1"), 0, 0); default: break; } return 0; } /************************************************************************/ /* 绑定操作 */ /************************************************************************/ VOID BindGameProcess(PTCHAR PNameBuffer) { g_ProcessInfo.MyFindProcess(PNameBuffer); g_ProcessInfo.m_hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, g_ProcessInfo.m_dwPid); //获取PID后返回ID值。 }
原文地址:https://www.cnblogs.com/hanhandaren/p/11079211.html
时间: 2024-10-11 20:23:28