/*
kbhook.cpp
*/
//#define _WIN32_WINNT 0400
#define _WIN32_WINNT 05000
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include<iostream>
using namespace std;
DWORD g_main_tid = 0;
HHOOK g_kb_hook = 0;
BOOL CALLBACK con_handler (DWORD)
{
//向当前应用程序,也就是控制台派发消息
//PostThreadMessage (g_main_tid, WM_ERASEBKGND, 0, 0);
return TRUE;
};
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
{
PKBDLLHOOKSTRUCT pkb = (PKBDLLHOOKSTRUCT)l;
const char *info = NULL;
if(pkb->vkCode == 0x41){
cout<<"current hook is \'r\'"<<endl;
}else{
if(w == WM_KEYFIRST)
cout<<"WM_KEYFIRST"<<endl;
}
return ::CallNextHookEx(g_kb_hook,code, w, l);
/*
//---------当钩子捕获到信息之后对其进行处理的核心程序------------
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l;
const char *info = NULL;
if (w == WM_KEYDOWN)
info = "key dn";
else if (w == WM_KEYUP)
info = "key up";
else if (w == WM_SYSKEYDOWN)
info = "sys key dn";
else if (w == WM_SYSKEYUP)
info = "sys key up";
printf ("%s - vkCode [%04x], scanCode [%04x]\n",
info, p->vkCode, p->scanCode);
// always call next hook
return CallNextHookEx (g_kb_hook, code, w, l);
*/
};
int main (void)
{
HWND hWnd;
LPCSTR lpStr = "MyConsoleHook";
LPCSTR lpNop = "NOTEPAD";
//设置控制台的控制句柄,如果Add为TRUE的话 忽略Crtl +c的中断
//可以不需要对控制台的句柄消息派发进行设置
//g_main_tid = GetCurrentThreadId ();
//SetConsoleCtrlHandler (&con_handler, TRUE);
//::SetConsoleCtrlHandler(&con_handler, false);
::SetConsoleTitle(lpStr);
//::SetCapture(g_main_tid);
g_kb_hook = SetWindowsHookEx (
/*----------参数说明当前hook的是键盘而不是鼠标----------*/
WH_KEYBOARD_LL, //#define WH_KEYBOARD_LL 13
//#define WH_MOUSE_LL 14
/*----------HOOK到了之后对该对象的处理--------------*/
&kb_proc,
/*-------------Module的实例句柄-------------*/
GetModuleHandle (NULL), // 不能为NULL,否则失败,因为是全局的故参数是NULL
/*-------------dw 线程的ID号----------------*/
0);
if (g_kb_hook == NULL)
{
fprintf (stderr, //strerr defined in stdio.h
"SetWindowsHookEx failed with error %d\n",
::GetLastError ());
return 0;
};
// 消息循环是必须的,想知道原因可以查msdn
MSG msg;
/*
HWND hWnd_Nop;
hWnd_Nop = ::FindWindow(NULL,"NOTEPAD");
*/
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};
UnhookWindowsHookEx (g_kb_hook);
return 0;
};
- 1
- 2
前往页