




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Hook和數(shù)據(jù)庫訪問1.安裝Hook過程屏蔽鼠標(biāo)鍵盤消息新建一個基于對話框的MFC應(yīng)用程序,取名InnerHook,在CInnerHookDlg類上的OnInitDialog函數(shù)中安裝Hook過程,編輯InnerHookDlg.cpp,如下:/全局變量,用來保存鍵盤鉤子過程的句柄 HHOOK g_hKeyboard=NULL; HHOOK g_hMouse=NULL; HWND g_hWnd=NULL; LRESULT CALLBACK MouseProc( int
2、60;nCode, / hook code WPARAM wParam, / message identifier LPARAM lParam / mouse coordinates )/鼠標(biāo)消息過程 return 1;
3、160; LRESULT CALLBACK KeyboardProc( int code, / hook code WPARAM wParam, / virtual-key code LPARAM lParam / keystroke-message
4、 information )/鍵盤消息過程 /* /if(VK_SPACE=wParam|VK_RETURN=wParam)/屏蔽空格與鍵 if(VK_F4=wParam && (1=(lParam>>29 & 1) return 1; &
5、#160; else return CallNextHookEx(g_hKeyboard,code,wParam,lParam); */ if(VK_F2=wParam) :SendMessage(g_hWnd,WM_CLOSE
6、,0,0); UnhookWindowsHookEx(g_hKeyboard);/移除hook過程 UnhookWindowsHookEx(g_hMouse); return 1; BOOL CInnerHookDl
7、g:OnInitDialog() . . / TODO: Add extra initialization here g_hWnd=m_hWnd; g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,
8、GetCurrentThreadId();/安裝鼠標(biāo)鉤子過程 g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId();/安裝鍵盤鉤子過程 return TRUE; / return TRUE unless you set the focus t
9、o a control 2.屏蔽所有的進(jìn)程與線程的鍵盤和鼠標(biāo)消息鉤子過程dll新建一個空的動態(tài)鏈接庫工程,取名Hook,并新建一個C+源文件,也取名Hook,編輯:#include <windows.h> HHOOK g_hMouse; HINSTANCE g_hInst;/用來存放當(dāng)前動態(tài)鏈接庫模塊的句柄 /* /方式一 BOOL WINAPI DllMain( HINSTANCE hinstDLL,
10、0; / handle to the DLL module DWORD fdwReason, / reason for calling function LPVOID lpvReserved / reserved )/得到動態(tài)鏈接庫模塊的句柄
11、; g_hInst=hinstDll; */ LRESULT CALLBACK MouseProc( int nCode, / hook code WPARAM wParam, / message identifier LPARAM lParam
12、160;/ mouse coordinates )/鼠標(biāo)的鉤子過程 return 1; void SetHook() /SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInst,0); /方式一 g_hMouse=SetWindowsHook
13、Ex(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);/方式二 /安裝鼠標(biāo)鉤子過程與當(dāng)前的所有進(jìn)程相關(guān),并返回鉤子過程的句柄給g_hMouse; /其中GetModuleHandle是得到動態(tài)鏈接庫模塊的句柄, 再在Hook工程目錄下,新建一個def文件,取名Hook.def,添加到工程,編輯:LIBRARY HookEXPORTSSetHook2調(diào)用Hook.dll的客戶端程序新建一個MFC基于單文檔的應(yīng)
14、用程序,在HookTestDlg.cpp中編輯:/ CHookTestDlg message handlers #pragma comment(lib,".HookDebugHook.lib")/引入庫文件 _declspec(dllimport) void SetHook();/聲明這個函數(shù)是從動態(tài)鏈接庫中引入的 BOOL CHookTestDlg:OnInitDialog() .
15、 . / TODO: Add extra initialization here SetHook();/調(diào)用這個Hook.dll中的函數(shù),安裝鉤子過程 return TRUE; / return TRUE unless you set t
16、he focus to a control 鍵盤鉤子在Hook.cpp中添加:#include <windows.h> HHOOK g_hMouse=NULL; HHOOK g_hKeyboard=NULL; HWND g_hWnd;/定義一個全局的句柄用來存放Hook.dll的句柄 LRESULT CALLBACK MouseProc( int nCode,
17、0; / hook code WPARAM wParam, / message identifier LPARAM lParam / mouse coordinates )/鼠標(biāo)鉤子過程 return 1; LRESULT
18、160;CALLBACK KeyboardProc( int nCode, / hook code WPARAM wParam, / message identifier LPARAM lParam / mouse coordinates )/鍵盤鉤子過程
19、60; if(VK_F2=wParam) SendMessage(g_hWnd,WM_CLOSE,0,0);/發(fā)送關(guān)閉窗口的消息 UnhookWindowsHookEx(g_hMouse);/移除鼠標(biāo)鉤子
20、60; UnhookWindowsHookEx(g_hKeyboard);/移除鍵盤鉤子 return 1; void SetHook(HWND hwnd)/通過一個參數(shù)將這個Hook.dll句柄傳進(jìn)來 g_hWnd=hwnd; /SetWindowsHo
21、okEx(WH_MOUSE,MouseProc,g_hInst,0); /方式一 g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);/方式二 /安裝鼠標(biāo)鉤子過程與當(dāng)前的所有進(jìn)程相關(guān),并返回鉤子過程的句柄給g_hMouse; /其中GetModuleHandle是得到
22、動態(tài)鏈接庫模塊的句柄 g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0); 在HookTestDlg.cpp中編輯:#pragma comment(lib,".HookDebugHook.lib")/引入庫文件 _declspec(dllimport) void SetHook(HWND hwnd);/聲明這個函數(shù)是從動態(tài)鏈接庫中
23、引入的 BOOL CHookTestDlg:OnInitDialog() . . SetHook(m_hWnd);/調(diào)用這個Hook.dll中的函數(shù),安裝鉤子過程 return TRUE; / return TRUE unless you&
24、#160;set the focus to a control 3.設(shè)置窗口最頂層且最大化編輯CHookTestDlg:OnInitDialog函數(shù):BOOL CHookTestDlg:OnInitDialog() . . / TODO: Add extra
25、0;initialization here int cxScreen,cyScreen; cxScreen=GetSystemMetrics(SM_CXSCREEN);/獲取屏幕的寬度 cyScreen=GetSystemMetrics(SM_CYSCREEN);/獲取屏幕的高度 SetWindowPos(&wndTopMost,0,0,
26、cxScreen,cyScreen,SWP_SHOWWINDOW);/設(shè)置窗口的大小 SetHook(m_hWnd);/調(diào)用這個Hook.dll中的函數(shù),安裝鉤子過程 return TRUE; / return TRUE unless you set the focus to a control 4.利用節(jié)關(guān)閉非當(dāng)前窗口在Hoo
27、k.cpp中編輯:#include <windows.h> HHOOK g_hMouse=NULL; HHOOK g_hKeyboard=NULL; #pragma data_seg("MySec")/創(chuàng)建一個名字為MySec的節(jié) /注意:節(jié)的名字要在8個字符以內(nèi),超出部分被截掉 HWND g_hWnd=NULL;/定義一個全局的句柄用來存放Hook.dll的句柄 #pragma data_seg() /節(jié)的結(jié)尾,這樣成員
28、變量g_hWnd就在MySec這個節(jié)當(dāng)中了 /注意:只有被初始化了的變量才會被放置在節(jié)當(dāng)中 /將MySec這個節(jié)設(shè)置成共享的節(jié) /方式一 /#pragma comment(linker,"/section:MySec,RWS")/設(shè)置這個節(jié)為讀寫共享(RWS) /方式二:在def文件當(dāng)中添加 /* SEGMENTS MySec READ WRITE SHARED */ . .在H
29、ook.def文件中添加:SEGMENTS MySec READ WRITE SHARED 編譯后,將Hook.dll文件拷貝到HookTest工程下,然后再次運(yùn)行HookTest測試程序,再按Alt+Tab鍵切換到其這程序下,按F2,測試程序依然退出了。5.數(shù)據(jù)庫的編程在VB中利用ADO訪問數(shù)據(jù)庫新建一VB工程,向窗體添加兩個控件(ADO Data Control 6.0)和(DataGrid Control 6.0),并拖到表單中,在Adodc1上點(diǎn)右鍵->屬性->使用連接字符串(生成)-&g
30、t;提供程序(OLE DB Provider for SQL Server),連接(用戶名:sa,密碼:luwei),數(shù)據(jù)庫(test)->確定->記錄源->命令類型(2-adCmdTable)->確定。 DataGrid控件的數(shù)據(jù)源選擇Adodc1,運(yùn)行,可以看到數(shù)據(jù)在DataGrid表控件中再新建一個VB工程,向窗體拖入一個列表框和按鈕,雙擊按鈕,編輯:Private Sub Command1_Click() Dim conn As New ADODB.Connection '定
31、義連接對象 'Dim rst As ADODB.Recordset '定義記錄集對象 Dim rst As New ADODB.Recordset Dim cmd As New ADODB.Command '定義Command對象 conn.ConnectionString = "Provider=SQLOLEDB.1;Password=
32、luowei;Persist Security Info=True;User ID=sa;Initial Catalog=test" '給連接字串賦值 conn.Open '方式一 'Set rst = conn.Execute("select * from S") '方式二 'rst.ActiveConnection = conn
33、160;'rst.Open ("select * from S") '方式三 cmd.ActiveConnection = conn cmd.CommandText = "select * from S" Set rst = cmd.Execute Do Until rst.EOF
34、160; List1.AddItem rst("sname") rst.MoveNext ' 循環(huán)取數(shù)據(jù) Loop End Sub運(yùn)行,OK !在VC中利用ADO訪問數(shù)據(jù)庫新建一個基于對話框的MFC應(yīng)用程序,取名:Ado,然后在對話框資源上添加一個列表框與按鈕(id: IDC_BTN_QUERY,Caption:查詢),雙擊,添加消息響應(yīng)函數(shù).首先在預(yù)編譯頭文件中添加:#import "
35、;C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace /導(dǎo)入ADO動態(tài)鏈接庫然后再編輯按鈕的消息響應(yīng)函數(shù),如下:void CAdoDlg:OnBtnQuery() / TODO: Add your control notification handler code here
36、0; CoInitialize(NULL);/初始化COM庫 _ConnectionPtr pConn(_uuidof(Connection);/產(chǎn)生一個Connection智能指針對象 _RecordsetPtr pRst(_uuidof(Recordset);/產(chǎn)生一個記錄集的智能指針對象 _CommandPtr pCmd(_uuidof(Command);/產(chǎn)生一個
37、Command智能指針對象 pConn->ConnectionString="Provider=SQLOLEDB.1;Password=luowei;Persist Security Info=True;User ID=sa;Initial Catalog=test" /通過連接字符串連接數(shù)據(jù)庫 pConn->Open("","","",adConnectUnspecified);/打開數(shù)據(jù)庫 /方式一 /pRst=pConn->Execute("select
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 風(fēng)險管理與評估試題及答案
- 《世界古代建筑欣賞:大二藝術(shù)史教學(xué)教案》
- 《太陽系八大行星的特點(diǎn):四年級地理教學(xué)教案》
- 新員工入職流程及操作系統(tǒng)使用指南
- 產(chǎn)品分銷與代理業(yè)務(wù)合作協(xié)議內(nèi)容
- 《走進(jìn)物理世界:高一物理實驗課程教案》
- 鄉(xiāng)村旅游農(nóng)業(yè)開發(fā)方案
- 年度市場活動策劃與執(zhí)行報告
- 公司采購協(xié)議附件書
- 采購居間合同例文
- 中藥玫瑰花培訓(xùn)
- 廣東省佛山市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版小升初真題((上下)學(xué)期)試卷及答案
- 2025年吉林通化梅河新區(qū)(梅河口市)專項引進(jìn)高層次教育人才40人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 危險性較大工程培訓(xùn)課件
- 建筑施工安全員述職
- 公司安全生產(chǎn)事故隱患內(nèi)部報告獎勵工作制度
- 開封市第二屆職業(yè)技能大賽無人機(jī)裝調(diào)檢修項目技術(shù)文件(國賽項目)
- 2024解析:第九章固體壓強(qiáng)-基礎(chǔ)練(解析版)
- 移動式升降平臺安全指導(dǎo)手冊
- 人美版六年級美術(shù)教案下冊全冊
- 老舊小區(qū)電梯改造的經(jīng)濟(jì)效益方案
評論
0/150
提交評論