您的位置:程序门 -> vb ->



unhookwindowshookex 卸载钩子出问题


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


unhookwindowshookex 卸载钩子出问题[已结贴,结贴人:applewanter]
发表于:2007-12-04 16:50:38 楼主
在窗体上有combo1,combo2,combo1屏蔽滚轮,combo2正常使用,但是当卸载钩子的时候提示错误"入口点   unhookwindowshookex   in   user32",帮我看看代码什么问题.

窗体代码:
private   sub   combo1_gotfocus()
lmousehook   =   setwindowshookex(wh_mouse_ll,   addressof   lowlevelmouseproc,   app.hinstance,   0)
end   sub

private   sub   combo1_lostfocus()
if   lmousehook   <>   0   then
            unhookwindowshookex   lmousehook
end   if
end   sub

    private   sub   form_load()
        combo1.additem   "1"
        combo1.additem   "2"
        combo1.additem   "3"
       
        combo2.additem   "1"
        combo2.additem   "2"
        combo2.additem   "3"
       
               
    end   sub

     
private   sub   form_queryunload(cancel   as   integer,   unloadmode   as   integer)
if   lmousehook   <>   0   then
            unhookwindowshookex   lmousehook
end   if
end   sub

模块代码:
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   declare   function   unhookwindowshookex   lib   "user32"   alias   "unhookwindowshookex"   (byval   hhook   as   long)   as   long
public   declare   function   callnexthookex   lib   "user32"   (byval   hhook   as   long,   byval   ncode   as   long,   byval   wparam   as   long,   lparam   as   any)   as   long
type   eventmsg
                                message       as   long
                                paraml       as   long
                                paramh       as   long
                                time       as   long
                                hwnd       as   long
end   type
 
private   type   pointapi
                x       as   long
                y       as   long
end   type
 
public   const   wh_mouse_ll   =   14
public   const   hc_action   =   0
public   const   wm_mousewheel   =   &h20a
 
public   msgs           as   eventmsg
public   lmousehook           as   long
     
public   function   lowlevelmouseproc(byval   code   as   long,   byval   wparam   as   long,   byval   lparam   as   long)   as   long
                if   code   =   hc_action   then
                        select   case   wparam
                                case   wm_mousewheel
                                                form1.caption   =   "mouse       wheel"
                                                 
                                                lowlevelmouseproc   =   -1
                        end   select
                end   if
 
                if   code   <>   0   then
                        lowlevelmouseproc   =   callnexthookex(0,   code,   wparam,   lparam)
                end   if
         
end   function
发表于:2007-12-05 08:34:101楼 得分:0
怎么没有搭理我?
发表于:2007-12-05 10:04:172楼 得分:0
我死了...
发表于:2007-12-05 10:55:593楼 得分:5
跟踪一下,看看卸载的时候句柄lmousehook       是否正确
发表于:2007-12-05 10:57:164楼 得分:5
vbscript code
lowlevelmouseproc = callnexthookex(lmousehook, code, wparam, lparam)

这句应该是这样吧?不过改了之后错误依旧。
帮顶一下,明天有时间好好找找原因。
发表于:2007-12-05 10:58:525楼 得分:5
先看看lmousehook是否有效

再看看unhookwindowshookex声明调用是否正确,错误信息提示这个可能性大点
发表于:2007-12-05 12:04:366楼 得分:0
谢谢各位的帖,可我还是没找出原因.....
发表于:2007-12-05 13:22:297楼 得分:5

private   sub   combo1_lostfocus()
if   lmousehook   <>   0   then
                        unhookwindowshookex   lmousehook
                        lmousehook   =   0   '按说这里应加上这一句,以免在form_queryunload中再执行unhookwindowshookex   ,但实际上,不加也不会你任何问题!我看这代码没有什么问题!你能说说错误提示吗?end   if
end   sub
发表于:2007-12-05 13:23:558楼 得分:30
再有说是你的声明换成这个试试:public   declare   function   unhookwindowshookex   lib   "user32"   (byval   hhook   as   long)   as   long
发表于:2007-12-05 17:23:409楼 得分:0
好用了,换成阿勇说的声明。谢谢大家!谢谢阿勇!


快速检索

最新资讯
热门点击