您的位置:程序门 -> vb -> 基础类



用vb可以实现屏蔽windows热键f10吗?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用vb可以实现屏蔽windows热键f10吗?
发表于:2007-10-15 09:34:16 楼主
用vb或vc可以实现屏蔽windows热键f10吗?
可以的话如何实现,最好有完整代码,谢谢!
当前程序屏蔽!谢谢!
发表于:2007-10-15 15:41:321楼 得分:0
setwindowshookex
发表于:2007-10-15 16:13:292楼 得分:0
创建一个工程,建一个窗体~再新建一个模块
窗体中的代码:
option   explicit
private   const   wh_keyboard_ll   =   13&

private   sub   cmdexit_click()
end
end   sub

public   sub   hookkeyboard()
keyboardhandle   =   setwindowshookex(wh_keyboard_ll,   addressof   keyboardcallback,   _
app.hinstance,   0&)
'wh_keyboard_ll:拦截类型
'addressof   keyboardcallback:挂接函数链的首地址
'app.hinstance:程序本身的句柄
'0,表示全局拦截,意思就是拦截所有窗口下的键盘输入
end   sub

private   sub   form_load()
'app.taskvisible   =   false
call   hookkeyboard
end   sub

private   sub   form_unload(cancel   as   integer)
call   unhookkeyboard     '卸载
end   sub

模块中的代码:

option   explicit

'通知windows进行钩子操作并定义钩子函数
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
'idhook:拦截类型           lpfn:挂接函数链的首地址指针
'hmod:创建钩子函数实体的句柄,即程序本身的句柄
'dwthreadid:为监控代码,0表示全局监控,dwthreadid用于线程钩子vb中可以设置为app.threadid。


public   declare   function   unhookwindowshookex   lib   "user32"   (byval   hhook   as   long)   as   long
'释放钩子

public   declare   function   getasynckeystate   lib   "user32"   (byval   vkey   as   long)   as   integer
'getasynckeystate作用是获得各种辅助功能键的状态(如ctrl,shift什么的)


public   declare   sub   copymemory   lib   "kernel32"   alias   "rtlmovememory"   (pdest   as   any,   _
psource   as   any,   byval   cb   as   long)
'将内存里的某一块数据psource拷贝到另一个地址pdest,cb表示拷贝内容的字节大小


private   declare   function   callnexthookex   lib   "user32"   (byval   hhook   as   long,   _
byval   ncode   as   long,   byval   wparam   as   long,   _
byval   lparam   as   long)   as   long
'挂钩函数拦截了某条消息后,由callnexthookex决定是否将这些消息送还给windows系统


private   type   kbdllhookstruct     '键盘钩子的结构体
vkcode   as   long         '虚拟键码
scancode   as   long       '扫描码
flags   as   long               '功能键状态
time   as   long
dwextrainfo   as   long
end   type


public   keyboardhandle   as   long       '键盘钩子函数句柄

private   const   hc_action   =   0
public   const   vk_f10   =   &h79


'钩子函数的核心
public   function   keyboardcallback(byval   code   as   long,   _
byval   wparam   as   long,   byval   lparam   as   long)   as   long
'code   表示拦截层次,之前我们已经说过,如果code为0,则拦截所有窗口的键盘输入
'wparam   表示是何种windows消息
'lparam表示某条windows消息的具体内容的指针,它实际指向存储那个内容的内存地址


static   hookstruct   as   kbdllhookstruct     '定义一个局部静态结构体实例

if   (code   =   hc_action)   then       '鉴别windows的消息来源

call   copymemory(hookstruct,   byval   lparam,   len(hookstruct))

if   (ishooked(hookstruct))   then       '过滤消息
keyboardcallback   =   1
exit   function
end   if

end   if

keyboardcallback   =   callnexthookex(keyboardhandle,   code,   wparam,   lparam)
'将消息释放,用callnexthookex交还给系统
end   function

public   function   ishooked(byref   hookstruct   as   kbdllhookstruct)   as   boolean

if   keyboardhandle   =   0   then
ishooked   =   false
exit   function
end   if
'有时候copymemory也会发生意想不到的事情,所以,当keyboardhandle   =   0   (无值)的情况下,退出,略过该函数,以防不可预知的错误。

if   (hookstruct.vkcode   =   vk_f10)   then    
ishooked   =   true
exit   function
end   if
end   function


public   sub   unhookkeyboard()       '释放钩子函数
'if   (hooked)   then
call   unhookwindowshookex(keyboardhandle)
'end   if
end   sub

发表于:2007-10-15 18:48:143楼 得分:0
.................................
发表于:2007-10-15 18:49:414楼 得分:0
你是要屏蔽拼音加加的快捷键吧?


快速检索

最新资讯
热门点击