標題:關於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...