SDK-简单的HOOK一下
本帖最后由 ebloke 于 2015-11-11 20:57 编辑新手学习~请多关照,不足多多指出~{:9_237:}
[*]#include "stdafx.h"
[*]LRESULT CALLBACK MyWndProc(HWND,UINT,WPARAM,LPARAM);
[*]int APIENTRY WinMain(HINSTANCE hInstance,
[*] HINSTANCE hPrevInstance,
[*] LPSTR lpCmdLine,
[*] int nCmdShow)
[*]{
[*] // TODO: Place code here.
[*] const char*szTitle = "SDK-简单HOOK程序";
[*] const char *szWindowClass = "MyWindowClass";
[*] MSG msg;
[*] WNDCLASSEX wcs;
[*] wcs.cbSize = sizeof(WNDCLASSEX);
[*] wcs.style = CS_HREDRAW|CS_VREDRAW;
[*] wcs.lpfnWndProc = (WNDPROC)MyWndProc;
[*] wcs.cbClsExtra = 0;
[*] wcs.cbWndExtra = 0;
[*] wcs.hInstance =hInstance;
[*] wcs.hIcon = LoadIcon(NULL,IDI_APPLICATION);
[*] wcs.hCursor = LoadCursor(NULL,IDC_CROSS);
[*] wcs.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
[*] wcs.lpszClassName = szWindowClass;
[*] wcs.lpszMenuName = NULL;
[*] wcs.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
[*] RegisterClassEx(&wcs);
[*] HWND hwnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
[*] CW_USEDEFAULT,0,300,200,NULL,NULL,hInstance,NULL);
[*] if (!hwnd)
[*] {
[*] return FALSE;
[*] }
[*] ShowWindow(hwnd,nCmdShow);
[*] UpdateWindow(hwnd);
[*] while (GetMessage(&msg,NULL,0,0))
[*] {
[*] TranslateMessage(&msg);
[*] DispatchMessage(&msg);
[*] }
[*] return msg.wParam;
[*]}
[*]HHOOK g_hKeyHook = NULL;//保存钩子句柄
[*]LRESULT CALLBACK MyKeyBoardProc(int code, WPARAM wParam, LPARAM lParam)
[*]{
[*] char buf={0};
[*] buf = (char)wParam;
[*] if (lParam>>31 == 0)
[*] {
[*] ::MessageBox(NULL,buf,"钩子过程:您按下了", MB_ICONINFORMATION);
[*] }else
[*] {
[*] ::MessageBox(NULL,buf,"钩子过程:您松开了",MB_ICONINFORMATION);
[*] }
[*] return ::CallNextHookEx(g_hKeyHook,code,wParam,lParam); //传递给下一个HOOK处理
[*]}
[*]LRESULT CALLBACK MyWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
[*]{
[*] char buf={0}; //定义一个缓冲区接收字符输入
[*] switch (message)
[*] {
[*] case WM_CREATE:
[*] //创建窗口完毕后安装钩子。 GetCurrentThreadId获取当前线程一个唯一的线程标识符
[*] g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, MyKeyBoardProc,NULL,::GetCurrentThreadId());
[*] break;
[*] case WM_CHAR: //窗口过程接收的消息
[*] buf=(char)wParam;
[*] if (lParam>>31 == 0)
[*] {
[*] ::MessageBox(NULL,buf,"窗口过程:您按下了",MB_ICONINFORMATION);
[*] }else
[*] {
[*] ::MessageBox(NULL,buf,"窗口过程:您松开了",MB_ICONINFORMATION);
[*] }
[*] break;
[*] case WM_DESTROY:
[*] ::UnhookWindowsHookEx(g_hKeyHook); //关闭钩子
[*] PostQuitMessage(0);
[*] break;
[*] default:
[*] return DefWindowProc(hwnd,message,wParam,lParam);
[*] }
[*] return 0;
[*]}
易语言
页:
[1]