靜態載入dll的問題

2022-04-18 01:40:25 字數 1516 閱讀 8424

鉤子的本質是一段用以處理系統訊息的程式,通過系統呼叫,將其掛入系統。鉤子的種類有很多,每種鉤子可以截獲並處理相應的訊息,每當特定的訊息發出,在到

達目的視窗之前,鉤子程式先行截獲該訊息、得到對此訊息的控制權。此時在鉤子函式中就可以對截獲的訊息進行加工處理,甚至可以強制結束訊息的傳遞。  

在本程式中我們需要捕獲在任意視窗上的鍵盤輸入,這就需要採用全域性鉤子以便攔截整個系統的訊息,而全域性鉤子函式必須以dll(動態連線庫)為載體進行封

裝,vc6中有三種形式的mfc   dll可供選擇,即regular   statically   linked   to   mfc  

dll(標準靜態鏈結mfc   dll)、regular   using   the   shared   mfc  

dll(標準動態鏈結mfc   dll)以及extension   mfc   dll(擴充套件mfc   dll)。  

wh_keyboard;第二個引數標識鉤子函式的入口位址,當鉤子鉤到任何訊息後便呼叫這個函式,即當不管系統的哪個視窗有鍵盤輸入馬上會引起

launcherhook的動作;第三個引數是鉤子函式所在模組的控制代碼,我們可以很簡單的設定其為本應用程式的例項控制代碼;最後乙個引數是鉤子相關函式的

id用以指定想讓鉤子去鉤哪個執行緒,為0時則攔截整個系統的訊息,在本程式中鉤子需要為全域性鉤子,故設定為0。    

……    

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

}    

return   result;    

}    

雖然呼叫callnexthookex()是可選的,但呼叫此函式的習慣是很值得推薦的;否則的話,其他安裝了鉤子的應用程式將不會接收到鉤子的通知而且

。(4)鏈結dll庫,即在"project","settings…"的"link"屬性頁內,在"object/librarymodules:"中填

入"launchdll.lib"。再通過"project","add   to  

project","files…"將launchdll.h新增到工程中來,最後在視類的原始檔keyhook.cpp中加入對其的引用:

#include   "launchdll.h"  

initinstance()函式中將m_pmainwnd->showwindow(sw_show);改為

m_pmainwnd->showwindow   (sw_hide);即可。    

四、執行與檢測    

編譯執行程式,執行起來之後並無什麼現象,但通過alt+ctrl+del在關閉程式對話方塊內可以找到我們剛編寫完畢的程式"keyhook",隨便在什

麼程式中通過鍵盤輸入字元,然後開啟記錄檔案,我們會發現:通過鍵盤鉤子,我們剛才輸入的字元都被記錄到記錄檔案中了。    

小結:系統鉤子具有相當強大的功能,通過這種技術可以對幾乎所有的windows系統訊息進行攔截、監視、處理。這種技術廣泛應用於各種自動監控  

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...

VC靜態載入DLL和動態載入DLL

a.dll 和a.lib 兩個檔案都有的話可以用靜態載入的方式 message 函式的宣告你應該知道吧,把它的宣告和下面的語句寫到乙個標頭檔案中 pragma comment lib,a.lib 然後你的對話方塊 cpp 中包含這個標頭檔案就可以使用 message 函式了。如果dll 沒有對應的 ...