10 鍵盤訊息

2021-09-06 04:02:33 字數 2917 閱讀 9644

windows通過給擁有輸入焦點的視窗wm_keydown和wm_keyup來報告按鍵被按下還是被釋放的事件,這些訊息被稱為擊鍵訊息;除了alt和f10外的所有鍵都產生按下和抬起訊息,alt和f10是系統鍵,對windows有特殊意義;

下面我們通過乙個hook鍵盤訊息的例子來演示一下鍵盤訊息的使用,首先我們用vs鍵乙個動態鏈結庫專案,名字為hookdll預設讓他生成並新增mfc公共頭如下圖:

在以下兩個檔案中新增**如下:

// 下列 ifdef 塊是建立使從 dll 匯出更簡單的

// 巨集的標準方法。此 dll 中的所有檔案都是用命令列上定義的 hookdll_exports

// 符號編譯的。在使用此 dll 的

// 任何其他專案上不應定義此符號。這樣,原始檔中包含此檔案的任何其他專案都會將

// hookdll_api 函式視為是從 dll 匯入的,而此 dll 則將用此巨集定義的

// 符號視為是被匯出的。

#ifdef hookdll_exports

#define hookdll_api __declspec(dllexport)

#else

#define hookdll_api __declspec(dllimport)

#endif

// 此類是從 hookdll.dll 匯出的

class hookdll_api chookdll ;

extern hookdll_api int nhookdll;

hookdll_api int fnhookdll(void);

//由於c++和c編譯出來最後函式名不一樣,導致ggetprocaddress找不到函式,所以新增這句

extern "c"

// hookdll.cpp : 定義 dll 應用程式的匯出函式。

//#include "stdafx.h"

#include "hookdll.h"

#ifdef _debug

#define new debug_new

#endif

// 唯一的應用程式物件

using namespace std;

int _tmain(int argc, tchar* argv, tchar* envp)

else

}else

return nretcode;

}/***************************以下**自己編寫的,以上**自動生成的************************************/

hhook g_hook;

hwnd g_hwnd;

lresult callback lowlevelkeyboardproc(int ncode, wparam wparam, lparam lparam)

return callnexthookex(g_hook, ncode, wparam, lparam);

}bool starthook(hwnd hwnd)

g_hwnd = hwnd;

//設定鉤子

g_hook = setwindowshookex(wh_keyboard_ll, lowlevelkeyboardproc,getmodulehandle(text("hookdll.dll")) , 0 );

if (g_hook) else

}

/*

*keymessage.h

*/#ifndef _key_message_h

#define _key_message_h

public:

virtual bool initinstance();

};class cmainwindow : public cframewnd;

#endif

/*

*keymessage.cpp

*/#include #include "keymessage.h"

begin_message_map(cmainwindow, cframewnd)

on_wm_paint()

on_wm_keydown()

on_wm_char()

on_wm_lbuttondown()

on_message(mwm_mymsg_01, onmymsg)

end_message_map()

cmainwindow::cmainwindow()

void cmainwindow::onkeydown(uint nchar, uint nrepcnt, uint nflags)

else }}

bool cmainwindow::starthook()

void cmainwindow::onchar(uint nchar, uint nrepcnt, uint nflags)

lresult cmainwindow::onmymsg(wparam wparam, lparam lparam)

//為編譯通過,這隨意填個返回值吧

return null;

}void cmainwindow::onpaint()

這樣當我們按下f2後標題會提示hook成功,然後按下任意鍵,會彈出提示框如下圖:

雖然執行優點跟病毒似的,但是為了演示就這樣了。

鍵盤訊息大全

austin 的 vc鍵盤訊息大全 符號常量 十六進製制值 指定的滑鼠或鍵盤按鍵 vk lbutton 01 滑鼠左鍵 vk rbutton 02 滑鼠右鍵 vk cancel 03 control break 過程 vk mbutton 04 滑鼠中鍵 vk back 08 backspace 鍵...

windows鍵盤訊息

鍵盤訊息分為擊鍵訊息和字元訊息 擊鍵訊息,如 wm keydown wm keyup wm syskeydown wm syskeyup 字元訊息,如 wm char wm deadchar wm syschar wm sysdeadchar 帶有sys表示一般交給defwindowproc處理,如...

Vc鍵盤訊息大全

符號常量 十六進製制值 指定的滑鼠或鍵盤按鍵 vk lbutton 01 滑鼠左鍵 vk rbutton 02 滑鼠右鍵 vk cancel 03 control break 過程 vk mbutton 04 滑鼠中鍵 vk back 08 backspace 鍵 vk tab 09 tab 鍵 v...