设为首页

广西经贸职业技术学院论坛

 忘记密码
 免费注册
查看: 696|回复: 10
打印 上一主题 下一主题

拦截按键消息

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
发表于 2003-10-29 09:05:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
{注意:这个结构在Windows NT 4 sp3以上系统中才能使用}<br/> type<br/> tagKBDLLHOOKSTRUCT = packed record<br/> vkCode: DWORD;<br/> scanCode: DWORD;<br/> flags: DWORD;<br/> time: DWORD;<br/> dwExtraInfo: DWORD;<br/> end;<br/> KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;<br/> PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;<br/> const WH_KEYBOARD_LL = 13;<br/> const LLKHF_ALTDOWN = $20;</p><p> var<br/> hhkLowLevelKybd: HHOOK;</p><p>  function LowLevelKeyboardProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM)RESULT; stdcall;<br/>  procedure hookstar; //设置钩子<br/>  procedure hookend;  //注消钩子</p><p> <br/> var<br/> hhkLowLevelKybd: HHOOK;</p><p> implementation</p><p> <br/> function LowLevelKeyboardProc(nCode: Integer;<br/> WParam: WPARAM;LParam: LPARAM)RESULT; stdcall;<br/> var<br/> fEatKeystroke: BOOL;<br/> p: PKBDLLHOOKSTRUCT;<br/> begin<br/> Result := 0;<br/> fEatKeystroke := FALSE;<br/> p := PKBDLLHOOKSTRUCT (lParam);<br/> if (nCode = HC_ACTION) then<br/> begin<br/> //拦截按键消息并测试是否是Ctrl+Esc、Alt+Tab、和Alt+Esc功能键。<br/> case wParam of<br/> WM_KEYDOWN,<br/> WM_SYSKEYDOWN,<br/> WM_KEYUP,<br/> WM_SYSKEYUP:<br/> fEatKeystroke :=<br/> ((p.vkCode = VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // Alt+Tab<br/> ((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or //<br/> (p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps) or  //上面是屏蔽WIN按键<br/> //((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN) and (P.vkCode = VK_Delete)) or<br/> ((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0))  or<br/> ((p.vkCode = VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or<br/> ((p.vkCode = VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) OR<br/> (((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode = VK_Delete))) //AND (p.flags = true) ;<br/> end;<br/> end;</p><p> if fEatKeystroke = True then<br/> Result := 1;<br/> if nCode <> 0 then<br/> Result := CallNextHookEx(0, nCode, wParam, lParam);<br/> end;<br/> //----------------------回调函数结束-----------------------------------------</p><p> procedure hookstar; //设置钩子<br/> begin<br/> //设置键盘钩子<br/> if hhkLowLevelKybd = 0 then<br/> begin<br/> hhkLowLevelKybd := SetWindowsHookExW(WH_KEYBOARD_LL,<br/>                                        LowLevelKeyboardProc,<br/>                                        Hinstance,<br/>                                         0);<br/> if hhkLowLevelKybd <> 0 then<br/>  //MessageBox(0, &#39;键盘钩子设置成功!&#39;, &#39;提示&#39;, MB_OK)<br/> else<br/>   MessageBox(0, &#39;键盘钩子设置失败!&#39;, &#39;提示&#39;, MB_OK);<br/> end<br/> else<br/>   //MessageBox(Handle, &#39;键盘钩子已设置!&#39;, &#39;提示&#39;, MB_OK);<br/> end;<br/> //---------------------设置钩子完成-----------------</p><p> procedure hookend;//卸载键盘钩子<br/> begin<br/> if hhkLowLevelKybd <> 0 then<br/> if UnhookWindowsHookEx(hhkLowLevelKybd) <> False then<br/> begin<br/> //MessageBox(0, &#39;系统热键恢复使用!&#39;, &#39;提示&#39;, MB_OK);<br/> hhkLowLevelKybd := 0;<br/> end<br/> else<br/> //MessageBox(Handle, &#39;键盘钩子卸载失败!&#39;, &#39;提示&#39;, MB_OK)<br/> else<br/> //MessageBox(Handle, &#39;没有发现键盘钩子!&#39;, &#39;提示&#39;, MB_OK);<br/> end;</p><p>
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

沙发
发表于 2003-10-29 09:07:00 | 只看该作者
嘻,俺不懂~~<br/> 不过还是非常[emb6]的
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

地板
 楼主| 发表于 2003-10-29 09:08:00 | 只看该作者
谢谢,其实我也不懂。。<br/>
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

4
发表于 2003-10-29 12:53:00 | 只看该作者
我不[emb6]
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

5
发表于 2003-10-31 20:07:00 | 只看该作者
我只想说~~~~~~~~~~~~~~~<br/> ~~~~~~~~~~~~~~[emb22][emb22][emb22][emb11][emb11][emb11][emb5][emb5][emb4][emb4][emb4][emb27][emb27][emb27][emb27]
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

6
发表于 2003-11-4 10:39:00 | 只看该作者
这个内容好深喔!~~我只能继续努力学习才能看得懂了!~<br/> 呵呵!~
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

7
发表于 2003-11-6 12:56:00 | 只看该作者
不实用   只限于  windows nt
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
天涯¢浪子 该用户已被删除
8
发表于 2003-11-10 21:18:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

9
发表于 2003-11-10 22:28:00 | 只看该作者
虽然俺们大部分人都NO懂,但多数人还是懂的~
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

10
发表于 2003-11-11 11:03:00 | 只看该作者
呵呵!~~说得也是,高手还是有的!~
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~

该用户从未签到

11
发表于 2003-11-19 16:52:00 | 只看该作者
好。。。。长!/无聊
常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|版主考核中心|『经贸在线』 ( 桂ICP备15001539号-2  

GMT+8, 2024-11-27 06:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表