用VB实现“一键上网”

Author: 冯士全 Date: 2001年 40期

?牐牫<搅氲绕放苹躺嫌泻芏喙δ芗梢源蚩榔鳌⒆执?理等程序,非常方便。那么,兼容机的键盘能实现这些功能吗?当然可以!我们可以通过VB编程,利用小键盘上不常用的键(如“*”、“+”等)实现“一键上网”甚至“一键星际”。
  ?牐牬蠹叶贾溃赩B中窗体的KeyPreview属性可以对键盘进行控制,但前提是窗体必须具有焦点,也就是在当前窗体下才可以这么做。当窗体不具有焦点时,我们只有设置一个Keyboard Hook来拦截键入的键,从而引发其他程序的运行,下面,我在VB中利用SetWindowsHookEx()函数来实现在窗口不具有焦点时,对键盘的控制,实现“一键上网”。
  ?牐牐б韵鲁绦蚴窃贛odule1.bas内
  ?牐燚eclare 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参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
  ?牐牐?lpfn参数代表Hook函数的位址
  ?牐牐?hmod代表.dll的hInstance
  ?牐牐?dwThreadId代表执行拦截的ThreadId
  ?牐燚eclare Function UnhookWindowsHookEx Lib"user32"(ByVal hHook As Long)As Long
  ?牐燚eclare Function CallNextHookEx Lib"user32"(ByVal hHook As Long,ByVal ncode As Long,ByVal wParam As Long,lParam As Any) As Long
  ?牐燩ublic Const WH_KEYBOARD = 2
  ?牐燩ublic hHook As Long
  ?牐燬ub EnableHook() '定义EnableHook
  ?牐牐?设置拦截
  ?牐爃Hook = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFunc, App.hInstance, 0)
  ?牐燛nd Sub
  ?牐燬ub DisableHook()?? '定义DisableHook
  ?牐燚im ret As Long
  ?牐爎et = UnhookWindowsHookEx(hHook) '取消拦截
  ?牐燛nd Sub
  ?牐燜unction Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
  ?牐營f wParam=vbKeyAdd Then '判断按键是否为小键盘上的“+”
  ?牐爏hell "c:\progra~1\intern~1\iexplore.exe", vbNormalFocus '执行文件
  ?牐燤yfunc=1
  ?牐燛xit Function '退出函数,避免循环
  ?牐燛nd if
  ?牐燤yfunc=CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
  ?牐燛nd Function
  ?牐牐?下面的程序是在Form内
  ?牐燩rivate Sub Form_Load()
  ?牐燙all EnableHook
  ?牐燛nd Sub
  ?牐燩rivate Sub Form_Unload(Cancel As Integer)
  ?牐燙all DisableHook
  ?牐燛nd Sub
  ?牐燩rivate Sub Form_Click()
  ?牐牐?让窗体不可见(也可以把Form1作为Splash屏幕)
  ?牐燜orm1.Visible = False
  ?牐燛nd Sub
  ?牐牫绦虻目蚣艽蟾湃绱耍行巳さ呐笥芽梢酝晟埔幌拢黾庸δ芗母鍪部梢钥龆曰翱蛑付üδ芗椭葱械某绦颍灰靶泥叮〕绦蛟赪indows Me/VB 5.0环境下运行通过。