鍵盤鉤子

C#鍵盤鉤子//*************************鍵盤鉤子********************** //定義變量 public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); static int hKeyboardHook = 0; HookProc KeyboardHookProcedure; /************************* * 聲明API函數 * ***********************/ // 安裝鉤子 (using System.Runtime.InteropServices;) [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId); // 卸載鉤子 [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern bool UnhookWindowsHookEx(int idHook); // 繼續下一個鉤子 [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); // 取得當前線程編號(線程鉤子需要用到) [DllImport("kernel32.dll")] static extern int GetCurrentThreadId(); //鉤子子程:就是鉤子所要做的事情 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { /**************** //線程鍵盤鉤子判斷是否按下鍵 Keys keyData = (Keys)wParam; if(lParam.ToInt32() > 0) { // 鍵盤按下 } if(lParam.ToInt32() < 0) { // 鍵盤抬起 } ****************/ /**************** //全局鍵盤鉤子判斷是否按下鍵 wParam = = 0x100 // 鍵盤按下 wParam = = 0x101 // 鍵盤抬起 ****************/ KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));//鍵盤 // 在這里添加你想要做是事情(比如把鍵盤nCode記錄下來,搞個郵件發送程序發到自己的郵箱去) return 0;//如果返回1,則結束消息,這個消息到此為止,不再傳遞。如果返回0或調用CallNextHookEx函數則消息出了這個鉤子繼續往下傳遞,也就是傳給消息真正的接受者 } return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); } //鍵盤結構 public struct KeyMSG { public int vkCode; //鍵值 public int scanCode; public int flags; public int time; public int dwExtraInfo; } // 安裝鉤子 public void HookStart() { if(hKeyboardHook == 0) { // 創建HookProc實例 KeyboardHookProcedure = new HookProc(KeyboardHookProc); // 設置線程鉤子 hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); //************************************ //鍵盤線程鉤子 //SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); //GetCurrentThreadId()為要監視的線程ID,你完全可以自己寫個方法獲取QQ的線程哦 //鍵盤全局鉤子,需要引用空間(using System.Reflection;) //SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); // //關于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函數將鉤子加入到鉤子鏈表中,說明一下四個參數: //idHook 鉤子類型,即確定鉤子監聽何種消息,上面的代碼中設為2,即監聽鍵盤消息并且是線程鉤子,如果是全局鉤子監聽鍵盤消息應設為13, //線程鉤子監聽鼠標消息設為7,全局鉤子監聽鼠標消息設為14。 // //lpfn 鉤子子程的地址指針。如果dwThreadId參數為0 或是一個由別的進程創建的線程的標識,lpfn必須指向DLL中的鉤子子程。 除此以外,lpfn可 //以指向當前進程的一段鉤子子程代碼。鉤子函數的入口地址,當鉤子鉤到任何消息后便調用這個函數。 // //hInstance應用程序實例的句柄。標識包含lpfn所指的子程的DLL。如果threadId 標識當前進程創建的一個線程,而且子程代碼位于當前 //進程,hInstance必須為NULL。可以很簡單的設定其為本應用程序的實例句柄。 // //threadedId 與安裝的鉤子子程相關聯的線程的標識符。如果為0,鉤子子程與所有的線程關聯,即為全局鉤子。 //************************************ // 如果設置鉤子失敗 if(hKeyboardHook == 0 ) { HookStop(); throw new Exception("SetWindowsHookEx failed."); } } } // 卸載鉤子 public void HookStop() { bool retKeyboard = true; if(hKeyboardHook != 0) { retKeyboard = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } if (!( retKeyboard)) throw new Exception("UnhookWindowsHookEx failed."); } //*****************************

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matplotlib基礎函數函數 plot, figure

matplotlib.pyplot.plot(*args, scalexTrue, scaleyTrue,dataNone,**kwargs) 用線段和標記去繪制x和y。調用簽名&#xff1a; plot([x], y, [fmt], *, dataNone, **kwargs) plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)點或線的坐標由x, y給出 操作參數 fmt 是為了…

清潔數據ploy n_清潔屋數據

清潔數據ploy nAs a bootcamp project, I was asked to analyze data about the sale prices of houses in King County, Washington, in 2014 and 2015. The dataset is well known to students of data science because it lends itself to linear regression modeling. You …

redis安裝redis集群

NoSql數據庫之Redis1、什么是nosql&#xff0c;nosql的應用場景2、Nonsql數據庫的類型a) Key-valueb) 文檔型&#xff08;類似于json&#xff09;c) 列式存儲d) 圖式3、redis的相關概念kv型的。4、Redis的安裝及部署5、Redis的使用方法及數據類型a) Redis啟動及關閉b) Redis的數…

聯想拯救者y7000p加內存條_內存、硬盤不夠用?手把手教你升級聯想拯救者Y7000P...

由于這兩年內存價格的高企&#xff0c;主流筆記本的內存容量被鎖定在 8GB 已經有了相當長的時間。作為近幾個月最熱門的游戲本產品&#xff0c;聯想拯救者 Y7000P 除頂配之外同樣使用的是 8GB 內存和 512GB 固態硬盤的配置。所以買到這款機器的玩家多數都會選擇進行內存和硬盤的…

機器學習實踐一 logistic regression regularize

Logistic regression 數據內容&#xff1a; 兩個參數 x1 x2 y值 0 或 1 Potting def read_file(file):data pd.read_csv(file, names[exam1, exam2, admitted])data np.array(data)return datadef plot_data(X, y):plt.figure(figsize(6, 4), dpi150)X1 X[y 1, :]X2 X[…

ajax+webservice

版本為AJAX November CTP 三個示例分別為&#xff1a;1 帶參數的WS方法2 不帶參數的WS方法3 參數類型為DataTable的WS方法 一、WebMethod注意要點&#xff1a;1 WebMethod類需要添加命名空間 Microsoft.Web.Script.Services&#xff0c;此空間需要引用Microsoft.Web.Preview.dl…

深度學習數據擴張_適用于少量數據的深度學習結構

作者&#xff1a;Gorkem Polat編譯&#xff1a;ronghuaiyang導讀一些最常用的few shot learning的方案介紹及對比。傳統的CNNs (AlexNet, VGG, GoogLeNet, ResNet, DenseNet…)在數據集中每個類樣本數量較多的情況下表現良好。不幸的是&#xff0c;當你擁有一個小數據集時&…

時間管理

時間管理 時間管理是運用策略和技術&#xff0c;幫助你盡可能有效地利用你的時間。 不僅僅是要將時間用在正確的地方&#xff0c; 而且還要將盡可能有效地加以利用。 目前是如何利用時間的&#xff1a; 意識是時間管理的先決條件。目標提供路線圖。選擇是難點。 意識 第一條…

基于邊緣計算的實時績效_基于績效的營銷中的三大錯誤

基于邊緣計算的實時績效We’ve gone through 20% of the 21st century. It’s safe to say digitalization isn’t a new concept anymore. Things are fully or at least mostly online, and they tend to escalate in the digital direction. That’s why it’s important to…

本線程鉤子

鉤子其實就是調用一下API而已&#xff1a; 1、安裝鉤子&#xff1a;   SetWindowsHookEx 函數原形&#xff1a;HHOOK SetWindowsHookEx( int idHook, // 鉤子類型&#xff0c; HOOKPROC lpfn, // 鉤子函數地址…

Maven Web項目解決跨域問題

跨域問題目前筆者所用到的方案大致有三種:jsonp,SpringMVC 4以上注解方式和cros三方過濾器。 Jsonp JSONP(JSON with Padding)是一個非官方的協議&#xff0c;它允許在服務器端集成Script tags返回至客戶端&#xff0c;通過javascript callback的形式實現跨域訪問&#xff08;這…

為什么Facebook的API以一個循環作為開頭?

作者 | Antony Garand譯者 | 無明如果你有在瀏覽器中查看過發給大公司 API 的請求&#xff0c;你可能會注意到&#xff0c;JSON 前面會有一些奇怪的 JavaScript&#xff1a;為什么他們會用這幾個字節來讓 JSON 失效&#xff1f;為了保護你的數據 如果沒有這些字節&#xff0c;那…

城市軌道交通運營票務管理論文_城市軌道交通運營管理專業就業前景怎么樣?中職優選告訴你...

??城市軌道交通運營管理專業&#xff0c;專業就業前景怎么樣&#xff1f;就業方向有哪些&#xff1f;有很多同學都感覺很迷忙&#xff0c;為了讓更多的同學們了解城市軌道交通運營管理專業的就業前景與就業方向&#xff0c;整理出以下內容希望可以幫助同學們。城市軌道交通運…

計算機視覺對掃描文件分類 OCR

通過計算機視覺對掃描文件分類 一種解決掃描文檔分類問題的深度學習方法 在數字經濟時代&#xff0c; 銀行、保險、治理、醫療、法律等部門仍在處理各種手寫票據和掃描文件。在業務生命周期的后期&#xff0c; 手動維護和分類這些文檔變得非常繁瑣。 對這些非機密文檔進行簡…

從錢龍數據中讀取股票權息信息導入到數據庫

從錢龍數據中讀取股票權息信息導入到數據庫 前面寫了如果讀股票代碼和日線數據&#xff0c;下面是如何讀股票的權息信息。 錢龍中權息數據存儲在QLDATA/history/shase/weight和QLDATA/history/sznse/weight目錄下&#xff0c;每個文件對應一只股票。 與前文一樣&#xff0c;只貼…

笑話生成器_爸爸笑話發生器

笑話生成器(If you’re just here for the generated jokes, scroll down to the bottom!)(如果您只是在這里生成笑話&#xff0c;請向下滾動到底部&#xff01;) I thought: what is super easy to build, yet would still get an approving chuckle if someone found it on …

AWS Amplify Console:賦予應用程序快速部署的能力

AWS re:Invent 2018大會發布了很多新功能和服務&#xff0c;包括新的AWS Amplify Console&#xff0c;一種針對移動Web應用程序的持續部署服務。 AWS Amplify Console承諾可以支持快速發布新功能&#xff0c;避免在部署應用程序時停機&#xff0c;并降低同時更新應用程序客戶端…

機器學習實踐二 -多分類和神經網絡

本次練習的任務是使用邏輯歸回和神經網絡進行識別手寫數字&#xff08;form 0 to 9, 自動手寫數字問題已經應用非常廣泛&#xff0c;比如郵編識別。 使用邏輯回歸進行多分類分類 練習2 中的logistic 回歸實現了二分類分類問題&#xff0c;現在將進行多分類&#xff0c;one vs…

Hadoop 倒排索引

倒排索引是文檔檢索系統中最常用的數據結構&#xff0c;被廣泛地應用于全文搜索引擎。它主要是用來存儲某個單詞&#xff08;或詞組&#xff09;在一個文檔或一組文檔中存儲位置的映射&#xff0c;即提供了一種根據內容來查找文檔的方式。由于不是根據文檔來確定文檔所包含的內…

koa2異常處理_讀 koa2 源碼后的一些思考與實踐

koa2的特點優勢什么是 koa2Nodejs官方api支持的都是callback形式的異步編程模型。問題&#xff1a;callback嵌套問題koa2 是由 Express原班人馬打造的&#xff0c;是現在比較流行的基于Node.js平臺的web開發框架&#xff0c;Koa 把 Express 中內置的 router、view 等功能都移除…