⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vb的hook简介_mysky.htm

📁 自己总结的一些VB资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
	if(xhr == null){		RelatedDocData = -1;		return;	}	xhr.open("GET", "/sys/search?type=8&word=VB%B5%C4HOOK%BC%F2%BD%E9&item=43c39fefaa059734acafd51a&t=" + new Date().getTime(), true);		xhr.onreadystatechange = function(){		if(xhr.readyState == 4){			if(xhr.status == 0 || xhr.status == 200){				if(GetAndEval){					eval(xhr.responseText);				}else{					RelatedDocData = xhr.responseText;				}			}		}	}	xhr.send(null);})();/*]]>*/</SCRIPT>

<META content="MSHTML 6.00.2900.3354" name=GENERATOR></HEAD>
<BODY onload=formatonlinpic();>
<CENTER>
<SCRIPT type=text/javascript>
/*<![CDATA[*/
if(top.location != self.location){
	top.location = self.location;
}
var myref = encodeURI("http://hi.baidu.com/gallonchai/blog/item/43c39fefaa059734acafd51a%2Ehtml");
/*]]>*/
</SCRIPT>
<LINK href="VB的HOOK简介_MySky.files/mods.css" type=text/css rel=stylesheet><LINK 
href="VB的HOOK简介_MySky.files/bb792b3e6609c93d70cf6c0a.css" type=text/css 
rel=stylesheet><LINK href="VB的HOOK简介_MySky.files/space.css" type=text/css 
rel=stylesheet>
<STYLE type=text/css>#usrbar {
	PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FONT-SIZE: 12px; BACKGROUND: #ffffff; FILTER: alpha(opacity=65); PADDING-BOTTOM: 3px; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 19px; PADDING-TOP: 4px; FONT-FAMILY: Arial; LETTER-SPACING: normal; HEIGHT: 19px; TEXT-ALIGN: right; moz-opacity: 0.5
}
#usrbar A {
	COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:link {
	COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:visited {
	COLOR: #0000cc; TEXT-DECORATION: underline
}
#ft {
	CLEAR: both; FONT-SIZE: 12px; COLOR: #666666; LINE-HEIGHT: 20px; FONT-FAMILY: Arial; HEIGHT: 20px; TEXT-ALIGN: center
}
#ft A {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:link {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:visited {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#usrbar {
	LETTER-SPACING: normal
}
#usrbar A {
	LETTER-SPACING: normal
}
#usrbar A:link {
	LETTER-SPACING: normal
}
#usrbar A:visited {
	LETTER-SPACING: normal
}
#ft {
	LETTER-SPACING: normal
}
#ft A {
	LETTER-SPACING: normal
}
#ft A:link {
	LETTER-SPACING: normal
}
#ft A:visited {
	LETTER-SPACING: normal
}
</STYLE>

<DIV id=usrbar><NOBR><A href="http://www.baidu.com/" target=_blank>百度首页</A> | <A 
id=hi_index href="http://hi.baidu.com/" target=_blank>百度空间</A>
<SCRIPT type=text/javascript>
		document.write('| <a href="http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u=http://hi.baidu.com' + encodeURI('/gallonchai/blog/item/43c39fefaa059734acafd51a%2Ehtml') + '">登录</a>');
		</SCRIPT>
 </NOBR></DIV>
<DIV id=main align=left><!--[if IE]>
<SCRIPT>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</SCRIPT>
<![endif]-->
<DIV id=header>
<DIV class=lc>
<DIV class=rc></DIV></DIV>
<DIV class=tit><A class=titlink 
title="gallonchai的空间 http://hi.baidu.com/gallonchai" 
href="http://hi.baidu.com/gallonchai">MySky</A></DIV>
<DIV class=desc>自由空间</DIV>
<DIV id=tabline></DIV>
<DIV id=tab><A href="http://hi.baidu.com/gallonchai">主页</A><A class=on 
href="http://hi.baidu.com/gallonchai/blog">博客</A><A 
href="http://hi.baidu.com/gallonchai/album">相册</A><SPAN>|</SPAN><A 
href="http://hi.baidu.com/gallonchai/profile">个人档案</A> <SPAN>|</SPAN><A 
href="http://hi.baidu.com/gallonchai/friend">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=modtl width=7>&nbsp;</TD>
    <TD class=modtc noWrap>
      <DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
    <TD class=modtc noWrap align=right></TD>
    <TD class=modtr width=7>&nbsp;</TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>VB的HOOK简介</DIV>
<DIV class=date>2007-08-22 09:55</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
  <TBODY>
  <TR>
    <TD>
      <DIV class=cnt id=blog_text>
      <P>VB的HOOK简介</P>
      <P><BR>Hook这个东西有时令人又爱又怕,Hook是用来拦截系统某些讯息之用,例如说,我们想<BR>让系统不管在什麽地方只要按个Ctl-B便执行NotePad,或许您会使用Form的KeyPreview<BR>,设定为True,但在其他Process中按Ctl-B呢?那就没有用,这是就得设一个Keyboard<BR>Hook来拦截所有Key 
      in的键;再如:MouseMove的Event只在该Form或Control上有效,如镇<BR>果希望在Form的外面也能得知Mouse 
      Move的讯息,那只好使用Mouse 
      Hook来栏截Mouse<BR>的讯息。再如:您想记录方才使用者的所有键盘动作或Mosue动作,以便录巨集,那就<BR>使用JournalRecordHook,如果想停止所有Mosue键盘的动作,而放(执行)巨集,那就<BR>使用JournalPlayBack 
      Hook;Hook呢,可以是整个系统为范围(Remote 
      Hook),即其他<BR>Process的动作您也可以拦截,也可以是LocalHook,它的拦截范围只有Process本身。<BR>Remote 
      Hook的Hook Function要在.Dll之中,Local 
      Hook则在.Bas中。<BR>在VB如何设定Hook呢?使用SetWindowsHookEx()</P>
      <P>Declare Function SetWindowsHookEx Lib "user32" Alias 
      "SetWindowsHookExA" _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ByVal 
      idHook As Long, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ByVal lpfn As Long,&nbsp;&nbsp;&nbsp; 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal hmod As 
      Long,&nbsp;&nbsp;&nbsp; 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal dwThreadId As 
      Long) As Long</P>
      <P>idHook代表是何种Hook,有以下几种<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const 
      WH_CALLWNDPROC = 4<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const 
      WH_CALLWNDPROCRET = 12<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_CBT = 
      5<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_DEBUG = 
      9<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_FOREGROUNDIDLE = 
      11<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_GETMESSAGE = 
      3<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_HARDWARE = 
      8<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_JOURNALPLAYBACK = 
      1<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_JOURNALRECORD = 
      0<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_KEYBOARD = 
      2<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_MOUSE = 
      7<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_MSGFILTER = 
      (-1)<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_SHELL = 
      10<BR>&nbsp;&nbsp;&nbsp;&nbsp; Public Const WH_SYSMSGFILTER = 6</P>
      <P>lpfn代表Hook Function所在的Address,这是一个CallBack 
      Fucnction,当挂上某个<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      Hook时,我们便得定义一个Function来当作某个讯息产生时,来处理它的Function<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      ,这个Hook Function有一定的叁数格式</P>
      <P>&nbsp;&nbsp;&nbsp;&nbsp; Private Function HookFunc(ByVal nCode As Long, 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ByVal wParam As Long, 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ByVal lParam As Long ) As Long</P>
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nCode 
      代表是什麽请况之下所产生的Hook,随Hook的不同而有不同组的可能值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      wParam lParam 传回值则随Hook的种类和nCode的值之不同而不同。</P>
      <P>&nbsp;&nbsp;&nbsp;&nbsp; 因这个叁数是一个 Function的Address所以我们固定将Hook 
      Function放在.Bas中,<BR>&nbsp;&nbsp;&nbsp;&nbsp; 并以AddressOf HookFunc传入。至於Hook 
      Function的名称我们可以任意给定,不一<BR>&nbsp;&nbsp;&nbsp;&nbsp; 定叫 HookFunc</P>
      <P>hmod 代表.DLL的hInstance,如果是Local 
      Hook,该值可以是Null(VB中可传0进去),<BR>&nbsp;&nbsp;&nbsp;&nbsp; 而如果是Remote 
      Hook,则可以使用GetModuleHandle(".dll名称")来传入。</P>
      <P>dwThreadId 
      代表执行这个Hook的ThreadId,如果不设定是那个Thread来做,则传0(所以<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      一般来说,Remote Hook传0进去),而VB的Local Hook一般可传App.ThreadId进去</P>
      <P>值回值 
      如果SetWindowsHookEx()成功,它会传回一个值,代表目前的Hook的Handle,<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      这个值要记录下来。</P>
      <P>因为A程式可以有一个System Hook(Remote Hook),如KeyBoard 
      Hook,而B程式也来设一<BR>个Remote的KeyBoard 
      Hook,那麽到底KeyBoard的讯息谁所拦截?答案是,最後的那一个<BR>所拦截,也就是说A先做keyboard 
      Hook,而後B才做,那讯息被B拦截,那A呢?就看B的<BR>Hook Function如何做。如果B想让A的Hook 
      Function也得这个讯息,那B就得呼叫<BR>CallNextHookEx()将这讯息Pass给A,於是产生Hook的一个连线。如果B中不想Pass这讯息<BR>给A,那就不要呼叫CallNextHookEx()。</P>
      <P>Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ByVal hHook As 
      Long, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal 
      ncode As Long, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ByVal wParam As Long, 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lParam As Any) 
      As Long</P>
      <P>hHook值是SetWindowsHookEx()的传回值,nCode, wParam, lParam则是Hook 
      Procedure<BR>中的三个叁数。</P>
      <P>最後是将这Hook去除掉,请呼叫UnHookWindowHookEx()</P>
      <P>Declare Function UnhookWindowsHookEx Lib "user32" Alias 
      "UnhookWindowsHookEx"&nbsp;&nbsp; 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ByVal hHook As 
      Long) As Long</P>
      <P>hHook便是SetWindowsHookEx()的传回值。此时,以上例来说,B程式结束Hook,则换A可<BR>以直接拦截讯息。</P>
      <P><BR>KeyBoard Hook的范例</P>
      <P>Hook Function的三个叁数</P>
      <P>nCode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      wParam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      lParam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      传回值<BR>===========&nbsp;&nbsp;&nbsp; ========================== 
      ==============&nbsp;&nbsp; 
      ================<BR>HC_ACTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表按键Virtual 
      Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      与WM_KEYDOWN同&nbsp;&nbsp; 
      若讯息要被处理传0<BR>或&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      反之传1<BR>HC_NOREMOVE</P>
      <P><BR>Public hHook as Long</P>
      <P>Public Sub UnHookKBD()<BR>If hnexthookproc &lt;&gt; 0 
      Then<BR>&nbsp;&nbsp;&nbsp;&nbsp; UnhookWindowsHookEx 
      hHook<BR>&nbsp;&nbsp;&nbsp;&nbsp; hHook = 0<BR>End If<BR>End Sub</P>
      <P>Public Function EnableKBDHook()<BR>If hHook &lt;&gt; 0 
      Then<BR>&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<BR>End If<BR>hhook = 
      SetWindowsHookEx(WH_KEYBOARD, AddressOf 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      MyKBHFunc, App.hInstance, App.ThreadId)<BR>End Function</P>
      <P>Public Function MyKBHFunc(ByVal iCode As Long, 
      _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal wParam As Long, ByVal lParam As 
      Long) As Long<BR>&nbsp;&nbsp;&nbsp; MyKBHfunc = 0 '表示要处理这个讯息</P>
      <P>&nbsp;&nbsp;&nbsp; If wParam = vbKeySnapshot Then&nbsp;&nbsp; '侦测 
      有没有按到PrintScreen键<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyKBHFunc = 1 
      '在这个Hook便吃掉这个讯息<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Call 
      CallNextHookEx(hHook, iCode, wParam, lParam) '传给下一个Hook<BR>End 
Function</P>
      <P>至於其他的 Hook的详细资料与nCode,wParam, lParam的意义,请查Win32 Help<BR>或Windows 95: A 
      Developer's Guide (Jeffrey Richter着)(中译本:<BR>基峰 李书良译 侯俊杰总监 
      Windows95程式设计指南)</P>
      <P></P>
      <P></P>
      <P><BR>按下HotKey以叫起视窗<BR>来源:cww<BR>如何做到在任何一个程式之下,按下某个HotKey组合键,便将我们的视窗Activate起来,<BR>这便得使用 
      WM_SETHOTKEY 来达成</P>
      <P>WM_SETHOTKEY所需的叁数如下:<BR>wParam = (WPARAM) MAKEWORD(vkey, 
      modifiers)&nbsp;&nbsp;&nbsp;<BR>lParam = 0</P>
      <P>vkey 指的是virtual-key code,它是在低位元组,modifier是以下四种键的组合,它是<BR>在高位元组。</P>
      <P>HOTKEYF_ALT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALT key<BR>HOTKEYF_CONTROL 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -