HOOK截獲中文輸入的方法

2021-04-02 11:38:01 字數 1939 閱讀 5433

標題:關於hook截獲中文輸入

發信站:安全焦點(2023年12月10日13時58分49秒)

以前一直沒有注意到乙個問題,就是用鍵盤鉤子截獲字元輸入時是截不到特殊字元的,比方說中文輸入法之類的.

後來用到了訊息鉤子去hook wm_ime_char,這時候大部分已經能夠獲取了,但是對於其他一些程式,比方說

word之類的也就不能截獲了.後來到msdn上查到, 要用到wm_ime_composition訊息,並且在處理該訊息

時要用到imm的一些庫函式從輸入法資料區中獲取.比方說immgetcontext,immgetcompositionstring等等.

以下是源**:

//hook ime to get chinese input char

//make by zwell

//2004.12.9

//this will build hook.dll, if you want to use, just use the export function installhook

//addtion: you must add the imm32.lib into project, otherwise, it can not be pass...^_^

#include "windows.h"

#include "imm.h"

#include "stdio.h"

#define hook_api __declspec(dllexport)

hhook        g_hhook            = null;        //hook控制代碼

hinstance    g_hhinstance    = null;        //程式控制程式碼

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

// 先將immgetcompositionstring的獲取長度設為0來獲取字串大小.

dwsize = immgetcompositionstring(himc, gcs_resultstr, null, 0);

// 緩衝區大小要加上字串的null結束符大小,

//   考慮到unicode

dwsize += sizeof(wchar);

memset(lpstr, 0, 20);

// 再呼叫一次.immgetcompositionstring獲取字串

immgetcompositionstring(himc, gcs_resultstr, lpstr, dwsize);

//現在lpstr裡面即是輸入的漢字了。你可以處理lpstr,當然也可以儲存為檔案...

messagebox(null, lpstr, lpstr, mb_ok);

immreleasecontext(hwnd, himc);}}

break;

case wm_char:  //截獲發向焦點視窗的鍵盤訊息

break;}}

return(lresult);

}hook_api bool installhook()

hook_api bool unhook()

bool apientry dllmain( handle hmodule,

dword  ul_reason_for_call,

lpvoid lpreserved

)return true;}/

hool.def模組:

/library    hook

exports

installhook

unhook

其實還有一點是要考慮到的,就是我們現在用到的是訊息鉤子,也就是說只能hook到入隊的訊息,

一旦程式用到了不入隊訊息的話,這種方法就是不可取的了,這時候就要考慮用到callproc鉤子.

希望對大家有用. ^_^

關於HOOK,如何通過鉤子截獲指定視窗的所有訊息

setwindowshookex 第三個引數為hinstance,通過findwindow找到指定視窗控制代碼後如何 得到該程序的hinstance呢?這個引數應該是你呼叫setwindowshookex的dll的模組例項控制代碼,它可以經由dllmain入口的第乙個引數得到。hhook setwi...

如何截獲帶文字輸入的控制項的輸入法輸入結果 C

如何截獲帶文字輸入的控制項的輸入法輸入結果 c 原創沐雨迎風 最後發布於2016 05 31 19 24 15 閱讀數 2207 收藏 展開最近在開發乙個串列埠終端軟體,需要實現輸入漢字,也就是類似於超級終端那樣,輸入乙個漢字或一串漢字立馬就傳送到串列埠。對於字母,很簡單,監控按鍵就可以,如果是漢字...

sublime text 3設定輸入中文方法

以下方法在 ubutun16.04 中親測可行,subl版本為 3126 原始檔github鏈結位址為 二.安裝fcitx輸入法 開啟終端,輸入命令 sudo apt get install y fcitx fcitx im安裝 fcitx 輸入法框架,安裝此框架後,框架下的輸入法就都可以在 sub...