飛跑的小豬的專欄
WINDOWS的鉤子函式可以認為是WINDOWS的主要特性之一。利用它們,您可以捕捉您自己程序或其它程序發生的事件。通過“鉤掛”,您可以給WINDOWS一個處理或過濾事件的回撥函式,該函式也叫做“鉤子函式”,當每次發生您感興趣的事件時,WINDOWS都將呼叫該函式。一共有兩種型別的鉤子:區域性的和遠端的。
區域性鉤子僅鉤掛您自己程序的事件。
遠端的鉤子還可以將鉤掛其它程序發生的事件。遠端的鉤子又有兩種:
基於執行緒的 它將捕獲其它程序中某一特定執行緒的事件。簡言之,就是可以用來觀察其它程序中的某一特定執行緒將發生的事件。
系統範圍的 將捕捉系統中所有程序將發生的事件訊息。 當您建立一個鉤子時,WINDOWS會先在記憶體中建立一個數據結構,該資料結構包含了鉤子的相關資訊,然後把該結構體加到已經存在的鉤子連結串列中去。新的鉤子將加到老的前面。當一個事件發生時,如果您安裝的是一個區域性鉤子,您程序中的鉤子函式將被呼叫。如果是一個遠端鉤子,系統就必須把鉤子函式插入到其它程序的地址空間,要做到這一點要求鉤子函式必須在一個動態連結庫中,所以如果您想要使用遠端鉤子,就必須把該鉤子函式放到動態連結庫中去。當然有兩個例外:工作日誌鉤子和工作日誌回放鉤子。這兩個鉤子的鉤子函式必須在安裝鉤子的執行緒中。原因是:這兩個鉤子是用來監控比較底層的硬體事件的,既然是記錄和回放,所有的事件就當然都是有先後次序的。所以如果把回撥函式放在DLL中,輸入的事件被放在幾個執行緒中記錄,所以我們無法保證得到正確的次序。故解決的辦法是:把鉤子函式放到單個的執行緒中,譬如安裝鉤子的執行緒。
鉤子一共有14種,以下是它們被呼叫的時機:
WH_CALLWNDPROC 當呼叫SendMessage時
WH_CALLWNDPROCRET 當SendMessage的呼叫返回時
WH_GETMESSAGE 當呼叫GetMessage 或 PeekMessage時
WH_KEYBOARD 當呼叫GetMessage 或 PeekMessage 來從訊息佇列中查詢WM_KEYUP 或 WM_KEYDOWN 訊息時
WH_MOUSE 當呼叫GetMessage 或 PeekMessage 來從訊息佇列中查詢滑鼠事件訊息時
WH_HARDWARE 當呼叫GetMessage 或 PeekMessage 來從訊息佇列種查詢非滑鼠、鍵盤訊息時
WH_MSGFILTER 當對話方塊、選單或滾動條要處理一個訊息時。該鉤子是區域性的。它時為那些有自己的訊息處理過程的控制元件物件設計的。
WH_SYSMSGFILTER 和WH_MSGFILTER一樣,只不過是系統範圍的
WH_JOURNALRECORD 當WINDOWS從硬體佇列中獲得訊息時
WH_JOURNALPLAYBACK 當一個事件從系統的硬體輸入佇列中被請求時
WH_SHELL 當關於WINDOWS外殼事件發生時,譬如任務條需要重畫它的按鈕.
WH_CBT 當基於計算機的訓練(CBT)事件發生時
WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應用程式很少使用
WH_DEBUG 用來給鉤子函式除錯
附:如何使用鉤子函式(接收到字母A按下時,窗體由最小化彈出的完整的程式碼)
Public Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Public Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Public Const WH_KEYBOARD = 2
Public Const KEY_WINSTART = 91
Public Const KEY_WINMENU = 93
Global hHook As Long
Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode >= 0 Then
If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then
If (lParam And &HC0000000) = 0 Then
MsgBox "", , ""
KeyboardProc = 1
Exit Function
End If
End If
End If
KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Option Explicit
Private Sub Command1_Click()
form2.Show 1
End Sub
Private Sub form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)
Me.Show
End Sub
Private Sub form_Unload(Cancel As Integer)
Call UnhookWindowsHookEx(hHook)
End Sub
相關推薦
飛跑的小豬的專欄
WINDOWS的鉤子函式可以認為是WINDOWS的主要特性之一。利用它們,您可以捕捉您自己程序或其它程序發生的事件。通過“鉤掛”,您可以給WINDOWS一個處理或過濾事件的回撥函式,該函式也叫做“鉤子函式”,當每次發生您感興趣的事件時,WINDOWS都將呼叫該函式。一共有兩種
『小豬呼嚕嚕』的專欄 -- I Write,therefore I am.
源自:ideawu (個人網站) 標籤:c/c++ 這篇文章只是我學習編譯原理的日記。我不是要寫一個生成機器程式碼的編譯器,我想寫一個生成其它語言的編譯器。可能是生成html或者c語言程式碼? 這是一個基於某個自定義的文法(將在下面給出)所編寫的部分功能的編譯器。已經
[Luogu P2973&BZOJ 1778][USACO10HOL]趕小豬DOtP(高斯消元+期望)
http ios iostream 爆炸 head swa sca 選擇 main Description 一個無向圖,節點1有一個炸彈,在每個單位時間內,有可能在這個節點炸掉,也有p/q的概率隨機選擇一條出去的路到其他的節點上。問最終炸彈在每個節點上爆炸的概率。 So
抓取小豬短租1000張列表頁內容
pre quest 個數 import rom lxml zip .text with 代碼如下 #!/usr/bin/env python# -*- coding:utf-8 -*-from bs4 import BeautifulSoupimport requestsd
小豬外送系統O2O快店多人極速拼單,點單應該這樣玩!
小豬外送系統 O2O快店 快店一直是小豬生活通O2O系統中使用頻率最高的模塊之一。所以,小豬O2O技術人員在不斷優化細節功能的同時,也在持續開發新功能,讓快店模塊能夠滿足更多的平臺及商家的運營需求。 近日,小豬生活通O2O為快店業務增加了一項全新功能——多人點單。
小豬智慧店鋪門店管理系統開發,員工權限分配更統一細致
小豬智慧店鋪 門店管理系統開發 小豬智慧店鋪門店管理系統開發,員工權限分配更統一細致 細致的門店管理權限分配,是小豬智慧店鋪一大運營亮點。門店商家可以依據自己的管理需求,對旗下員工分配具體的操作權限,比如會員管理、收銀、物料管理等等。 為方便商家快速分配員工相關權限,
小豬零售收銀系統開發 構建新零售商業模式
零售收銀系統開發 小豬電商 小豬零售收銀系統開發 構建新零售商業模式 隨著新零售時代的到來,線上線下融合趨勢增強。如何讓線下實體門店快速搶灘新零售市場、構建新零售商業模式? 小豬電商新推出零售收銀臺,從收銀環節打通線上線下數據融合互通,幫助線下實體門店快速開展新零售業務,為客戶提供
小豬CMS線下沙龍完美閉幕,開啟合作共贏新征程!
小豬CMS 線下沙龍 小豬CMS線下沙龍完美閉幕,開啟合作共贏新征程! 2017年6月13日,小豬CMS線下沙龍交流會在中國·合肥隆重召開。來自全國各地的互聯網創業者、小豬智慧店鋪代理商客戶們濟濟一堂,共同學習和探討移動互聯網趨勢下,行業如何實現經營模式轉型、高效開展業務,以及門店如何快速
小豬的數據結構輔助教程——2.4 線性表中的循環鏈表
linklist tro listt his alloc ret 線圖 循環鏈表 exit 小豬的數據結構輔助教程——2.4 線性表中的循環鏈表
抓取小豬短租列表內容並保存在mongodb裏
抓取 select requests orm com titles mongod lin ges import pymongoimport requestsfrom bs4 import BeautifulSoupclient = pymongo.MongoClient(‘
洛谷 P3904 三只小豬
efi 方案 str pic 分配 破壞 urn 文件 esp 題目背景 你聽說過三只小豬的故事嗎?這是一個經典的故事。很久很久以前,有三只小豬。第一只小豬用稻草建的房子,第二個小豬用木棍建的房子,第三個小豬則使用磚做為材料。一只大灰狼想吃掉它們並吹倒了稻草和木棍建的房子。
系統設計之可憐的小豬
cond ive ner ffi 設計 wait ram make div With 2 pigs, poison killing in 15 minutes, and having 60 minutes, we can find the poison in up to 2
[Luogu2973][USACO10HOL]趕小豬
get tdi code 一個 algorithm www next || blog Luogu sol 首先解釋一波這道題無重邊無自環 設\(f_i\)表示\(i\)點上面的答案。 方程 \[f_u=\sum_{v,(u,v)\in E}(1-\frac PQ)\frac
使用canvas 代碼畫小豬佩奇
con func out .quad math str BE pig 眼睛 <canvas id="myCanvas" width="400" height="500" style="border: 1px solid #808080; margin-l
用python畫小豬佩奇(非原創)
import CI Go col 轉換 fill begin 範圍 nco 略作改動: # coding:utf-8 import turtle as t t.screensize(400, 300, "blue") t.pensize(4) # 設置畫筆的大小 t.c
小豬佩奇社會人專用服務器,有意思的python小程序,附python代碼
小程序 image 一個 CA 都在 pytho GC 有意 ima 最近社會人小豬佩奇挺熱門的,大家都在說社會人,那麽我們作為IT人,怎麽讓我們的服務器也蹭一下社會人的熱點的?下面來給大家說說。 先來個效果圖: 小豬佩奇社會人專用服務器 哈哈,這樣是不是挺有意思的?工
小豬佩奇最近很火啊!那麽怎麽用代碼寫呢?Python源碼送給你!
size load original IE 也有 package 說明 shell str 齊天大聖保佑服務器 字體什麽的,都可以通過代碼進行微調。此次僅僅是作為樂趣分享。下面就把代碼分享出來,有興趣的朋友可以自己做來玩下。 程序代碼 至於
Python爬蟲入門 | 5 爬取小豬短租租房信息
圖片 交流 ffffff 信息 jpg http 而已 基本 mat 小豬短租是一個租房網站,上面有很多優質的民宿出租信息,下面我們以成都地區的租房信息為例,來嘗試爬取這些數據。 小豬短租(成都)頁面:http://cd.xiaozhu.com/1.爬取租房標題 按照慣例,
復仇的小豬遊戲區塊鏈遊戲定制開發
篡改 產生 交易系統 重新 實力 可見 方式 數據 DApp 復仇的小豬遊戲區塊鏈遊戲,利用區塊鏈技術,加入鳥幣,創新玩遊戲即挖礦的概念,讓玩家在娛樂的同時能夠賺錢。這是一款公平公正透明化的對戰類遊戲,使玩家能夠更信任遊戲機制。如何搭建類似系統,復仇的小豬遊戲區塊鏈遊戲DA
LeetCode--458--可憐的小豬
測試 設有 tco type int etc 描述 div urn 問題描述: 有1000只水桶,其中有且只有一桶裝的含有毒藥,其余裝的都是水。它們從外觀看起來都一樣。如果小豬喝了毒藥,它會在15分鐘內死去。 問題來了,如果需要你在一小時內,弄清楚哪只水桶含有毒藥,你最少需