1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          Windows編程筆記之Hook(鉤子)

          來源:互聯網轉載 時間:2023-10-24 17:44:44

          目錄

          • 設置鉤子(安裝鉤子)
          • 取消鉤子(卸載鉤子)
          • 回調監聽消息(鉤子程序或函數)
          • 補充
          • 例子

          1 - 設置鉤子(安裝鉤子)函數

          HHOOK SetWindow( int idHook,//鉤子類型比如WH_KEYBOARD HOOOKPROC lpfn,//回調函數地址 HINSTANCE hMod,//實例句柄 DWORD dwThreadid//線程id,可設置為0,但需要dll的回調寫入第二參數??墒褂肎etCurrentThreadId()獲取當前線程id )

          返回值:若此函數執行成功,則返回值就是該掛鉤處理過程的句柄;若此函數執行失敗,則返回值為NULL(0).若想獲得更多錯誤信息,請調用GetLastError函數.

          idHook:鉤子的類型,即它處理的消息類型

          lpfn:鉤子子程序的地址指針(回調函數名字)。如果dwThreadId參數為0或是別的進程創建的線程id,則lpdn必須指向DLL中的鉤子程序。dwThreadId其他情況之外,lpfn可以指向當前進程的一段鉤子子程序。獲取當前進程的線程id,可以通過GetCurrentThreadId()函數獲取。鉤子函數的入口地址,當鉤子夠到任何相關消息后,就會調用這個回調函數。

          hMod:應用程序實例句柄。標識包含lpfn所指的子程序(鉤子函數)的dll。

          dwThreadId:與安裝的鉤子子程序相關的線程標識符。如果為0,鉤子子程序與所有的線程關聯,即為全局鉤子。

          繼續啟用鉤子

          以上所說的鉤子子程與線程相關聯是指在一鉤子鏈表中發給該線程的消息同時發送給鉤子子程,且被鉤子子程先處理。
          在鉤子子程中調用得到控制權的鉤子函數在完成對消息的處理后,如果想要該消息繼續傳遞,那么它必須調用另外一個 SDK中的API函數CallNextHookEx來傳遞它,以執行鉤子鏈表所指的下一個鉤子子程。這個函數成功時返回鉤子鏈中下一個鉤子過程的返回值, 返回值的類型依賴于鉤子的類型。這個函數的原型如下:
          LRESULT CallNextHookEx
          (
          HHOOK hhk;
          int nCode;
          WPARAM wParam;
          LPARAM lParam;
          );

          hhk:為當前鉤子的句柄,由SetWindowsHookEx()函數返回。

          NCode:為傳給鉤子過程的事件代碼。

          wParam和lParam: 分別是傳給鉤子子程的wParam值IParam值,其具體含義與鉤子類型有關。

          2- 取消鉤子(卸載鉤子)函數

          BOOL WINAPI UnhookWindowsHookEx( HHOOK hhk//要刪除的鉤子句柄。這個參數是上一個函數SetWindowsHookEx的返回值。 );

          返回值:如果失敗,返回0;如果成功,返回非0。BOOL類型。

          3- 回調監聽消息回調函數(鉤子程序)

          格式如下

          LRESULT CALLBACK FunctionName( int code, //一個代碼鉤子過程使用,以確定如何處理該信息。如果code小于0,鉤子過程必須將信息傳遞給CallNextHookEx方法不經進一步處理和返回其返回值 WPARAM wParam, //附加消息,根據鉤子類型而定 LPARAM lParam//附加消息,根據鉤子類型而定 );

          注意:該鉤子程序也是SetWindows()函數的第二個參數。

          補充

          函數功能: 該函數檢取表示鍵名的字符串。

          int GetKeyNameText( long iParam,//指定被處理的鍵盤消息(例如WM_KEYDOWN)的第二個參數。 LPTSTR lpString,//指向接受鍵名的緩沖區的指針。 int nSize//指定鍵名的最大字符長度,包括空結束符。 )

          返回值:若成功,將拷貝一個以空結尾的字符串到指定的緩沖區中,且返回值為該字符串的長度(字符數),不計空字符。若失敗,返回0。

          iParam:該參數一共32位,每一位如下部分
          1、16-23:掃描碼
          2、24:擴展標記,用于區別增強型鍵盤上的某些鍵
          3、25:無關位,調用該函數的應用程序設置此位來表示函數不應區分諸如左右按鍵。

          備注:鍵名字符串的格式取決于當前鍵盤布局,鍵盤驅動程序持有一張字符串形式的鍵名表(每個名字長度大于一個字符)并依據當前安裝的鍵盤布局對鍵名進行翻譯。每個字符鍵的名字是該字符本身,該鍵的名字被完整的拼寫出來。

          例子

          #include<windows.h> #include<tchar.h> #include<stdio.h> //鉤子變量 HHOOK hHook = 0; #pragma comment (lib,"winmm.lib")//攔截信息處理程序(鉤子函數) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) {//打開文件FILE*fp = fopen("key.dat", "a");//繼續截獲if (fp == NULL){return CallNextHookEx(hHook, code, wParam, lParam);}//獲取按鍵的名稱if (code < 0 || code == HC_NOREMOVE){return CallNextHookEx(hHook, code, wParam, lParam);}//lParam是32位 每一位都是特殊含義if (lParam & 0x40000000){return CallNextHookEx(hHook, code, wParam, lParam);}//按鍵名稱char szKeyName[100] = { 0 };GetKeyNameTextA(lParam, szKeyName, 100);//寫入文件fwrite(szKeyName, 1, strlen(szKeyName), fp);fwrite("\r\n", 1, 2, fp);//關閉文件fclose(fp);return 0; }LRESULT CALLBACK WndPro(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreinstance, LPSTR lpCmdLine, int nCmdShow) {//窗口類名TCHAR szWindowClass[] = TEXT("win32程序");//【1】窗口類WNDCLASSEX wnd;wnd.cbClsExtra = 0;//根據窗口類結構分配額外的字節數wnd.cbSize = sizeof(WNDCLASSEX);//窗口類結構大小wnd.cbWndExtra = 0;//窗口實例化之后分配的額外字節數wnd.hbrBackground = CreateSolidBrush(RGB(20, 120, 120));//窗口背景wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口鼠標樣式wnd.hIcon = LoadIcon(hinstance, IDI_APPLICATION);//類圖標wnd.hInstance = hinstance;//窗口句柄wnd.hIconSm = LoadIcon(wnd.hInstance, IDI_APPLICATION);//與窗口關聯的圖標wnd.lpfnWndProc = WndPro;//窗口過程函數wnd.lpszClassName = szWindowClass;//窗口類名wnd.lpszMenuName = NULL;//菜單名wnd.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;//窗口變化重繪//【2】注冊窗口類if (!RegisterClassEx(&wnd)){MessageBox(NULL, L"注冊失敗", L"提示", NULL);return 1;}//【3】創建窗口HWND hwnd = CreateWindow(szWindowClass,L"win32",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500, 500,NULL, NULL,hinstance,NULL);if (!hwnd){MessageBox(NULL, L"創建窗口失敗", L"提示", NULL);return 1;}//【4】展示窗口ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);//【5】消息循環MSG msg;while (GetMessage(&msg, NULL, 0, 0) != -1){//[1]翻譯消息TranslateMessage(&msg);//[2]轉發消息DispatchMessage(&msg);}return 0; }LRESULT CALLBACK WndPro(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {//HMODULE hMod;int i = 0;switch (message){case WM_CREATE:/*hMod= GetModuleHandle(L"win32");if (hMod==0)MessageBox(NULL, L"HOOK_ERROR", L"提示", NULL);*/hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, 0, GetCurrentThreadId());//0表示全局鉤子,也可以修改成線程idif (hHook == NULL)MessageBox(NULL, L"HOOK_ERROR", L"提示", NULL);break;case WM_PAINT:break;case WM_CLOSE:DestroyWindow(hwnd);break;case WM_DESTROY:UnhookWindowsHookEx(hHook);PostQuitMessage(0);break;default:break;}return DefWindowProc(hwnd, message, wParam, lParam); }

          結果在data.dat文件。當打開一個其他的程序(如命令窗口dos時),該鉤子程序會監聽鍵盤消息,并記錄在data.dat文件。

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          (資料圖片僅供參考)隨著社會越來越發達,大家都選擇在網絡上汲取相關知識內容,比如劉愷威飾演的皇太極電視劇叫什么,為了更好的解答大家的問題,小編也是翻閱整理了相應內容,下面就一起來看一下吧!劉愷威飾演的皇太極電視劇叫《美人無淚》?!睹廊藷o淚》這部電視劇是于正繼《美人心計》、《美人天下》后的第三部美人的收官之作,由袁姍姍、劉愷威、張檬、蔡少芬、韓棟、鄧莎等主演的古裝言情劇。劉愷威飾演清太祖愛新覺羅?努...

          據了解,SKG系中國按摩儀品牌。SKG官網信息顯示:未來穿戴健康科技股份有限公司(SKG)成立于2007年,是一家專注于可穿戴按摩儀研發、設計、生產的高科技公司。立足于人體健康數據管理,SKG一直致力于讓每個人更年輕健康,為用戶提供高品質的可穿戴按摩儀產品和服務體驗,同時也不斷整合最優質的研發、設計和制造資源,現已擁有全球1000+項核心專利。2020年10月30日,SKG正式宣布中國內地流行樂男...

          網易理財的現金寶產品有風險嗎?現金寶是網易理財平臺精選的合作方提供的一款具有較高收益且保證資金隨取隨用的貨幣基金產品,貨幣市場基金是證券投資基金中的低風險品種,歷史上未曾出現負收益情況。網易現金寶是互聯網公司網易和知名的基金公司匯添富基金合作推出的理財產品,購買后即可享受貨幣基金收益。一分錢起存。收益高于銀行活期存款,又具有很好的流動性,隨取隨用,支持7*24小時申請即時取現,取現資金實時到賬。和...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>