鉤子函數(shù)是用來給系統(tǒng)回調(diào)的. 簡單的說就是你注冊一個(gè)鉤子以后.發(fā)生鉤子注冊的事件. 系統(tǒng)就調(diào)用你注冊的鉤子函數(shù)并傳遞參數(shù)給你. 比如你注冊了一個(gè)鍵盤鉤子, 當(dāng)用戶按下XX鍵的時(shí)候系統(tǒng)就調(diào)用你注冊的鉤子函數(shù). 并且把用戶按下了哪些鍵當(dāng)作參數(shù)傳遞過來. XX小馬就是用這個(gè)來邪惡的
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有廣宗免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
麻煩采納,謝謝!
大大提供了靈活性。
@before_first_request
在對應(yīng)用程序?qū)嵗牡谝粋€(gè)請求之前注冊要運(yùn)行的函數(shù),只會(huì)運(yùn)行一次
@before_request
在每個(gè)請求之前注冊一個(gè)要運(yùn)行的函數(shù),每一次請求都會(huì)執(zhí)行一次
@after_request
在每個(gè)請求之后注冊一個(gè)要運(yùn)行的函數(shù),每次請求完成后都會(huì)執(zhí)行。
需要接受一個(gè)Response對象作為參數(shù),并返回一個(gè)新的Response對象,或者返回接收的Response對象
@teardown_request
注冊在每一個(gè)請求的末尾,不管是否有異常,每次請求的最后都會(huì)執(zhí)行。
@context_processor
上下文處理器,返回的字典可以在全部的模板中使用
@template_filter('xxxxxx')
增加模板過濾器,可以在模板中使用該函數(shù),后面的參數(shù)是名稱,在模板中用到
@errorhandler(400)
發(fā)生一些異常時(shí),比如404,500,或者拋出異常(Exception)之類的,就會(huì)自動(dòng)調(diào)用該鉤子函數(shù)
1.發(fā)生請求錯(cuò)誤時(shí),框架會(huì)自動(dòng)調(diào)用相應(yīng)的鉤子函數(shù),并向鉤子函數(shù)中傳入error參數(shù)
2.如果鉤子函數(shù)沒有定義error參數(shù),就會(huì)報(bào)錯(cuò)
3.可以使用abort函數(shù)來手動(dòng)終止請求拋出異常,如果要是發(fā)生參數(shù)錯(cuò)誤,可以abort(404)之類的
a. app.py
b. hooks.py
c. main.py
看別人的寫法,創(chuàng)建hooks.py后,直接在該文件import app后,然后寫鉤子函數(shù),在訪問過程中鉤子函數(shù)是生效,但我一直失敗,沒辦法只能更改寫法了。
先在app.py中創(chuàng)建app對象,然后在hooks.py中import app寫好鉤子函數(shù),最后在main.py中import app時(shí)不再是從app.py中了,而是從hooks.py中import,那么在這個(gè)過程中hooks.py文件就加載了,鉤子函數(shù)也就生效了。
可以參考下面的路徑去學(xué)習(xí),祝你學(xué)有所成,公司最近在人工智能和自然語言處理的項(xiàng)目后端項(xiàng)目,我也是網(wǎng)上找了很多知識,最后給自己列了一個(gè)學(xué)習(xí)的目錄,按照這個(gè)在復(fù)習(xí)并在總結(jié),希望能幫到你:
計(jì)算機(jī)基本認(rèn)知,環(huán)境搭建 ? ?python環(huán)境搭建
計(jì)算機(jī)基本認(rèn)識,進(jìn)制轉(zhuǎn)換
python注釋使用
python變量使用
python數(shù)據(jù)類型_Number
python數(shù)據(jù)類型 ? ?str字符串類型
容器類型數(shù)據(jù)list,tuple,str
容器類型數(shù)據(jù)set,dict
變量緩存機(jī)制
自動(dòng)類型轉(zhuǎn)換
Number強(qiáng)制類型轉(zhuǎn)換 ?
python運(yùn)算符的使用 ? ?容器類型數(shù)據(jù)強(qiáng)制類型轉(zhuǎn)換
字典強(qiáng)轉(zhuǎn)等長二級容器
運(yùn)算符_算數(shù)_比較
運(yùn)算符_賦值_成員
運(yùn)算符_身份_邏輯
運(yùn)算符_位運(yùn)算_優(yōu)先級 ?
python流程控制 ? ?代碼塊
流程控制if
多項(xiàng)巢狀分支
循環(huán)結(jié)構(gòu)while
循環(huán)判斷經(jīng)典題
字符串的相關(guān)操作 ?
python循環(huán)結(jié)構(gòu)? ??
關(guān)鍵字continue_break_pass
for循環(huán)的遍歷_range ?
字符串,列表內(nèi)置方法? ??
字符串函數(shù)
format字符串格式化
format特殊符號的使用
列表的操作
列表函數(shù) ?
字典,集合內(nèi)置方法+文件操作? ??
字典的相關(guān)函數(shù)
集合操作_函數(shù)
文件操作
文件加號模式 ?
函數(shù),函數(shù)參數(shù) ? ?文件相關(guān)函數(shù)?
函數(shù)
形參實(shí)參
默認(rèn)形參_關(guān)鍵字形參
收集參數(shù)
命名關(guān)鍵字參數(shù)
全局/局部變量,閉包 ? ?return返回值
函數(shù)名的使用
局部變量_全局變量
函數(shù)的嵌套LEGB
關(guān)鍵字nonlocal
閉包函數(shù) ?
遞歸,匿名函數(shù)? ??
locals和globals
閉包特點(diǎn)意義
遞歸含義
斐波那契_尾遞歸
匿名函數(shù)lambda ?
迭代器,高階函數(shù) ? ?迭代器
高階函數(shù)_map
高階函數(shù)_reduce
高階函數(shù)_sorted
高階函數(shù)_filter ?
推導(dǎo)式 ? ?列表推導(dǎo)式
推導(dǎo)式題
集合_字典推導(dǎo)式
生成器表達(dá)式
生成器函數(shù) ?
內(nèi)置方法,linux基本命令 ? ?內(nèi)置函數(shù)
可滑動(dòng)序列
面試題演練
linux安裝
linux基本命令 ?
python模塊 ? ?序列化模塊
數(shù)學(xué)模塊
隨機(jī)模塊
time模塊 ?
python模塊 ? ?os模塊
os_shutil
os.path模塊
計(jì)算文件夾大小
zipfile
tarfile ?
導(dǎo)入模塊包,oop面向?qū)ο笳J(rèn)知? ??
import_from絕對導(dǎo)入
import_from相對導(dǎo)入(單入口)
oop面向?qū)ο?/p>
類的封裝性
oop之封裝,繼承 ? ?類的相關(guān)操作
對象和類的刪除操作
單繼承
多繼承
菱形繼承
oop之多態(tài),魔術(shù)方法 ? ?多態(tài)
魔術(shù)方法__new__
單態(tài)模式
析構(gòu)方法__del__ ?
oop之魔術(shù)方法,異常處理 ? ?魔術(shù)方法__call__
魔術(shù)方法__str__repr__
魔術(shù)方法__bool_add_len__
了解異常
異常處理語法
主動(dòng)拋出異常
裝飾器 ?
裝飾器
靜態(tài)綁定方法
property?
正則表達(dá)式 ? ?單個(gè)字符匹配
多個(gè)字符匹配
匹配分組
命名分組
正則函數(shù)
正則計(jì)算器小程序
認(rèn)識網(wǎng)絡(luò) ? ?bs_cs流程
傳輸數(shù)據(jù)流程
交換機(jī)和局域網(wǎng)的網(wǎng)絡(luò)通訊
arp協(xié)議 ?
認(rèn)識tcp/udp協(xié)議 ?
tcp基本語法
tcp循環(huán)發(fā)消息
udp基本語法
udp循環(huán)發(fā)消息
黏包 ?
基于tcp協(xié)議下的應(yīng)用 ? ?socketserver并發(fā)
文件校驗(yàn)
服務(wù)器合法性校驗(yàn)
tcp登錄
并發(fā)編程之進(jìn)程 ? ?進(jìn)程
join
守護(hù)進(jìn)程
lock鎖
Semaphore
生產(chǎn)者消費(fèi)者模型 ? ?Event事件
進(jìn)程隊(duì)列Queue
生產(chǎn)者和消費(fèi)者模型
JoinableQueue
Manager.py
并發(fā)編程之線程
.線程
用類定義線程
守護(hù)線程
lock保證線程數(shù)據(jù)安全
信號量_Semaphore
死鎖,互斥鎖,遞歸鎖
線程池,進(jìn)程池,協(xié)成的使用
事件Event
線程隊(duì)列
進(jìn)程池和線程池
回調(diào)函數(shù)
協(xié)程
協(xié)程的爬蟲案例
mysql安裝(linux+windows+xshell+navicat) ?
掌握數(shù)據(jù)庫mysql基本操作
mysql登錄,服務(wù)啟動(dòng)
創(chuàng)建賬戶,用戶授權(quán)
數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)的增刪改查
認(rèn)識常用數(shù)據(jù)類型 ?
數(shù)據(jù)庫的存儲(chǔ)引擎和約束 ?
字段約束
約束的刪減
存儲(chǔ)引擎區(qū)別用法
數(shù)據(jù)表之間的關(guān)系 ?
查詢數(shù)據(jù)表 ?
單表查詢
多表聯(lián)查
子查詢
帶EXISTS關(guān)鍵字的子查詢
python操作mysql ?
python連接mysql的事務(wù)處理
sql注入
python連接mysql增刪改查
mysql數(shù)據(jù)恢復(fù) ?
HTML/CSS? ? html文檔介紹,html標(biāo)簽,body標(biāo)簽,head標(biāo)簽介紹,head標(biāo)簽中的meta標(biāo)簽和link標(biāo)簽和title標(biāo)簽介紹,body中的標(biāo)簽分類,基礎(chǔ)標(biāo)簽,img、a、列表、表格、input、label、select等標(biāo)簽,作業(yè)講解,form標(biāo)簽介紹和示例講解,css介紹,引入,css選擇器,背景設(shè)置,高度寬度,字體效果,邊框、盒子模型、display屬性、float屬性等 ?
CSS ? ?偽類選擇器,文字裝飾、a標(biāo)簽補(bǔ)充、定位、權(quán)重、小米商城導(dǎo)航欄講解,原型頭像示例講解 ?
JS基礎(chǔ)/BOM和DOM操作 ? ?小米商城作業(yè),js介紹和js引入,js數(shù)據(jù)類型、流程控制、函數(shù)等操作,js中的JSON,BOM對象的彈框、location對象、定時(shí)器、直接查找選擇器、間接查找選擇器、值操作、類值操作、樣式操作、button按鈕補(bǔ)充、事件和綁定事件的兩種方式,常用事件練習(xí) ?
jQuery/Bootstrap ? ?作業(yè)講解,jquery介紹,引入、選擇器、篩選器、值操作、文檔操作、刪除和清空標(biāo)簽、邏輯運(yùn)算符、克隆、事件冒泡和事件委托、綁定事件的方式,作業(yè)講解和模態(tài)對話框示例,input事件和頁面載入事件補(bǔ)充、bootstrap介紹和引入、全局css樣式、組件和常用插件
自定義web框架 ? ?作業(yè)講解、web框架介紹、自定義web框架實(shí)現(xiàn)、動(dòng)態(tài)頁面、返回不同的html頁面、函數(shù)版、多線程版、返回靜態(tài)文件版,wsgiref版等web框架通過socket來實(shí)現(xiàn),還有jinja2的簡單使用 ?
django下載安裝和URL路由系統(tǒng) ? ?django介紹、MTV和MVC框架介紹、常用指令、目錄結(jié)構(gòu)、pycharm創(chuàng)建django項(xiàng)目、request的常用屬性介紹、登錄示例、url路由系統(tǒng)介紹、有名分組和無名分組, ?
視圖/模板 ? ?request對象的常用方法和屬性、響應(yīng)方法介紹和使用,CBV和FBV、CBV和FBV加裝飾器,CBV源碼講解,模板渲染系統(tǒng)介紹,語法、簡單示例、內(nèi)置過濾器、for循環(huán)標(biāo)簽、if標(biāo)簽、with標(biāo)簽、自定義過濾器和標(biāo)簽、模板繼承等 ?
Dajngo的ORM(1) ? ?orm介紹,數(shù)據(jù)庫同步指令使用和流程分析、配置連接mysql模型類中的屬性介紹和常用參數(shù)說明,創(chuàng)建表和數(shù)據(jù)、增加的兩種方法、刪除、更新的兩種方法、查詢的13個(gè)api接口 ?
Dajngo的ORM(2) ? ?單表圖書管理系統(tǒng)展示和添加作業(yè)講解、choices屬性、auto_now_add和auto_now參數(shù)講解、url別名和反向解析,基于雙下劃線的模糊查詢,多表結(jié)構(gòu)介紹,圖書管理系統(tǒng)編輯和刪除作業(yè)講解、多表關(guān)系模型類創(chuàng)建和字段說明和參數(shù)介紹、多表數(shù)據(jù)的添加操作,多表的刪除和修改、基于對象的跨表查詢、雙下劃線跨表查詢、查看原生sql語句的方法、聚合查詢、分組查詢、F查詢、Q查詢等 ?
Ajax與Django/ 中間件 ? ?ajax的介紹和簡單示例,ajax登錄示例、列表數(shù)據(jù)展示示例,ajax操作cookie的補(bǔ)充、中間件介紹、自定義中間件的方法、5個(gè)中間件方法的介紹和使用、基于中間件的session登錄認(rèn)證?
cookie、session以及用戶認(rèn)證組件 ? ?cookie介紹,cookie的流程解析,django操作cookie和其他參數(shù)介紹、session的說明、django的session操作等,多表圖書管理系統(tǒng)作業(yè)講解 ?
vue初識、es6基本語法、指令系統(tǒng) ? ?let、const、v-if、v-for、v-html、v-text、v-model、v-show、生命周期鉤子函數(shù)、 ?
組件化開發(fā)、組件傳值、axios簡單使用 ? ?組件化開發(fā)、組件傳值、axios簡單使用、vue-router使用、vue-cli安裝 ?
項(xiàng)目初始化/首頁 ? ?項(xiàng)目介紹、創(chuàng)建、初始化、element-ui的使用,單文件組件的使用和axios在單文件中的使用和配置、vue-cli的介紹和使用、路飛項(xiàng)目頂部導(dǎo)航欄頁面效果搭建,輪播圖組件的使用和調(diào)整、購物車頁面搭建和課程詳情頁面搭建,vue-video-player視頻播放插件 ?
drf組件 ? ?序列化器、drf簡單示例、restful規(guī)范、反序列化的校驗(yàn)機(jī)制 ?
drf組件 ? ?apiview、request和response對象、modelserializer、序列化器保存數(shù)據(jù)、read_only和write_only的參數(shù) ?
drf組件 ? ?viewset、drf路由功能、viewset視圖基類的使用、視圖子類、通用視圖類genericapiview/排序、django-filter過濾器、頻率組件、分頁組件、接口文檔、異常處理、xadmin的安裝和使用、認(rèn)證組件和權(quán)限組件 ?
git、消息隊(duì)列 ? ?git企業(yè)中的使用模式,rabbimq消息隊(duì)列的應(yīng)用 ?
rpc通信,grpc組件 ? ?rpc的概念以及通信模式,最火的grpc組件使用?
輕量級Flask框架 ? ?Werkzeug服務(wù)介紹、Flask框架介紹 ?
路由系統(tǒng)、自定義路由擴(kuò)展 ?
Cookie、Session、Http請求和響應(yīng) ?
藍(lán)圖、消息閃現(xiàn)、中間件 ?
Flask常用擴(kuò)展、WTForms、使用SQLAchemy ORM ?
Admin、Restful、websocket原理、magic string, payload len,masking key? ?
請求和上下文、多app應(yīng)用、離線腳本、自定義擴(kuò)展?
服務(wù)端項(xiàng)目搭建,項(xiàng)目配置(session、數(shù)據(jù)庫、日志相關(guān)),項(xiàng)目初始化 ?
jsonrpc模塊基本配置和使用,客戶端展示首頁及登錄注冊葉綿,APICloud頁面控制管理
python進(jìn)階 ? ?并發(fā)、同步、異步、鎖,線進(jìn)程概念以及協(xié)程實(shí)現(xiàn)原理 ?
mysql進(jìn)階課 ? ?基礎(chǔ)知識梳理、索引、執(zhí)行計(jì)劃 ?
mysql進(jìn)階課 ? ?存儲(chǔ)引擎、日志管理、備份恢復(fù)、主從賦值、優(yōu)化 ?
redis,mongodb ? ?事務(wù)和發(fā)布訂閱、RDB和AOF持久化、緩存擊穿、緩存雪崩等原理介紹、 用戶管理和復(fù)制集(RS)總結(jié)、sharding cluster 分片集群的搭建、分片使用和相關(guān)策略等 ?
算法與設(shè)計(jì)模式 ? ?鏈表、二叉樹、常見算法、二分查找、插入排序、希爾排序、快排、堆排序、哈希查找 ?
算法與設(shè)計(jì)模式 ? ?設(shè)計(jì)模式,單例模式、工廠模式、策略模式、觀察者模式 ?
算法與設(shè)計(jì)模式 ? ?leetcode經(jīng)典算法解析 ?
知識體系差不多就這么多了,再就是項(xiàng)目部分,具體項(xiàng)目要看需求了,學(xué)會(huì)了釣魚的方法,不怕釣不到魚哦,無論在哪個(gè)行業(yè)做什么樣的項(xiàng)目都沒問題呢!
我自己也搜集了一些經(jīng)典的資料,要是想要加我百度網(wǎng)盤:艾美電商,我發(fā)給你!
例子:
#!/usr/bin/python
# Filename: class_init.py
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print Hello, my name is, self.name
p = Person(Swaroop)
p.sayHi()
這個(gè)例子中就是在init方法中定義了參數(shù)name,然后調(diào)用的時(shí)候直接用類名person帶上傳參swaroop就行了,swaroop參數(shù)就會(huì)傳遞給sayhi(),整個(gè)流程就對應(yīng)c中的構(gòu)造函數(shù)。
然后說鉤子,其實(shí)就是實(shí)現(xiàn)一種內(nèi)操作,有子進(jìn)程的意思但又不是,至于裝飾函數(shù)是不是鉤子好像沒官方說法,我認(rèn)為可以算是。裝飾器就是把一個(gè)函數(shù)對象返回給另一個(gè)函數(shù)來實(shí)現(xiàn)既定的功能,其實(shí)就是一種內(nèi)操作。
PS:很多東西都是相關(guān)的,比如方法和它的具體實(shí)現(xiàn)功能,等你用到它的功能以后就很好理解了,單純的研究理論也沒什么意思。尤其是這種比較抽象的概念。
WINDOWS的鉤子函數(shù)可以認(rèn)為是WINDOWS的主要特性之一。利用它們,您可以捕捉您自己進(jìn)程或其它進(jìn)程發(fā)生的事件。通過“鉤掛”,您可以給WINDOWS一個(gè)處理或過濾事件的回調(diào)函數(shù),該函數(shù)也叫做“鉤子函數(shù)”,當(dāng)每次發(fā)生您感興趣的事件時(shí),WINDOWS都將調(diào)用該函數(shù)。一共有兩種類型的鉤子:局部的和遠(yuǎn)程的。
局部鉤子僅鉤掛您自己進(jìn)程的事件。
遠(yuǎn)程的鉤子還可以將鉤掛其它進(jìn)程發(fā)生的事件。遠(yuǎn)程的鉤子又有兩種:
基于線程的 它將捕獲其它進(jìn)程中某一特定線程的事件。簡言之,就是可以用來觀察其它進(jìn)程中的某一特定線程將發(fā)生的事件。
系統(tǒng)范圍的 將捕捉系統(tǒng)中所有進(jìn)程將發(fā)生的事件消息。 當(dāng)您創(chuàng)建一個(gè)鉤子時(shí),WINDOWS會(huì)先在內(nèi)存中創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包含了鉤子的相關(guān)信息,然后把該結(jié)構(gòu)體加到已經(jīng)存在的鉤子鏈表中去。新的鉤子將加到老的前面。當(dāng)一個(gè)事件發(fā)生時(shí),如果您安裝的是一個(gè)局部鉤子,您進(jìn)程中的鉤子函數(shù)將被調(diào)用。如果是一個(gè)遠(yuǎn)程鉤子,系統(tǒng)就必須把鉤子函數(shù)插入到其它進(jìn)程的地址空間,要做到這一點(diǎn)要求鉤子函數(shù)必須在一個(gè)動(dòng)態(tài)鏈接庫中,所以如果您想要使用遠(yuǎn)程鉤子,就必須把該鉤子函數(shù)放到動(dòng)態(tài)鏈接庫中去。當(dāng)然有兩個(gè)例外:工作日志鉤子和工作日志回放鉤子。這兩個(gè)鉤子的鉤子函數(shù)必須在安裝鉤子的線程中。原因是:這兩個(gè)鉤子是用來監(jiān)控比較底層的硬件事件的,既然是記錄和回放,所有的事件就當(dāng)然都是有先后次序的。所以如果把回調(diào)函數(shù)放在DLL中,輸入的事件被放在幾個(gè)線程中記錄,所以我們無法保證得到正確的次序。故解決的辦法是:把鉤子函數(shù)放到單個(gè)的線程中,譬如安裝鉤子的線程。
鉤子一共有14種,以下是它們被調(diào)用的時(shí)機(jī):
WH_CALLWNDPROC 當(dāng)調(diào)用SendMessage時(shí)
WH_CALLWNDPROCRET 當(dāng)SendMessage的調(diào)用返回時(shí)
WH_GETMESSAGE 當(dāng)調(diào)用GetMessage 或 PeekMessage時(shí)
WH_KEYBOARD 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時(shí)
WH_MOUSE 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列中查詢鼠標(biāo)事件消息時(shí)
WH_HARDWARE 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列種查詢非鼠標(biāo)、鍵盤消息時(shí)
WH_MSGFILTER 當(dāng)對話框、菜單或滾動(dòng)條要處理一個(gè)消息時(shí)。該鉤子是局部的。它時(shí)為那些有自己的消息處理過程的控件對象設(shè)計(jì)的。
WH_SYSMSGFILTER 和WH_MSGFILTER一樣,只不過是系統(tǒng)范圍的
WH_JOURNALRECORD 當(dāng)WINDOWS從硬件隊(duì)列中獲得消息時(shí)
WH_JOURNALPLAYBACK 當(dāng)一個(gè)事件從系統(tǒng)的硬件輸入隊(duì)列中被請求時(shí)
WH_SHELL 當(dāng)關(guān)于WINDOWS外殼事件發(fā)生時(shí),譬如任務(wù)條需要重畫它的按鈕.
WH_CBT 當(dāng)基于計(jì)算機(jī)的訓(xùn)練(CBT)事件發(fā)生時(shí)
WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應(yīng)用程序很少使用
WH_DEBUG 用來給鉤子函數(shù)除錯(cuò)
附:如何使用鉤子函數(shù)(接收到字母A按下時(shí),窗體由最小化彈出的完整的代碼)
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
網(wǎng)頁名稱:鉤子函數(shù)python 鉤子函數(shù)和回調(diào)函數(shù)
網(wǎng)址分享:http://jinyejixie.com/article40/hpcheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、云服務(wù)器、標(biāo)簽優(yōu)化、外貿(mào)建站、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)