微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用VB实现“一键上网”
栏目软件世界
作者冯士全
发布2001年40期
  常见到联想等品牌机键盘上有很多功能键,可以打开浏览器、字处理等程序,非常方便。那么,兼容机的键盘能实现这些功能吗?当然可以!我们可以通过VB编程,利用小键盘上不常用的键(如“*”、“+”等)实现“一键上网”甚至“一键星际”。
  大家都知道,在VB中窗体的KeyPreview属性可以对键盘进行控制,但前提是窗体必须具有焦点,也就是在当前窗体下才可以这么做。当窗体不具有焦点时,我们只有设置一个Keyboard Hook来拦截键入的键,从而引发其他程序的运行,下面,我在VB中利用SetWindowsHookEx()函数来实现在窗口不具有焦点时,对键盘的控制,实现“一键上网”。
  '以下程序是在Module1.bas内
  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参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
  'lpfn参数代表Hook函数的位址
  'hmod代表.dll的hInstance
  'dwThreadId代表执行拦截的ThreadId
  Declare Function UnhookWindowsHookEx Lib"user32"(ByVal hHook As Long)As Long
  Declare Function CallNextHookEx Lib"user32"(ByVal hHook As Long,ByVal ncode As Long,ByVal wParam As Long,lParam As Any) As Long
  Public Const WH_KEYBOARD = 2
  Public hHook As Long
  Sub EnableHook() '定义EnableHook
  '设置拦截
  hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFunc, App.hInstance, 0)
  End Sub
  Sub DisableHook() '定义DisableHook
  Dim ret As Long
  ret = UnhookWindowsHookEx(hHook) '取消拦截
  End Sub
  Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
  If wParam=vbKeyAdd Then '判断按键是否为小键盘上的“+”
  shell "c:\progra~1\intern~1\iexplore.exe", vbNormalFocus '执行文件
  Myfunc=1
  Exit Function '退出函数,避免循环
  End if
  Myfunc=CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
  End Function
  '下面的程序是在Form内
  Private Sub Form_Load()
  Call EnableHook
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
  Call DisableHook
  End Sub
  Private Sub Form_Click()
  '让窗体不可见(也可以把Form1作为Splash屏幕)
  Form1.Visible = False
  End Sub
  程序的框架大概如此,有兴趣的朋友可以完善一下,增加功能键的个数,也可以开个对话框指定功能键和执行的程序,但不要太贪心喽!程序在Windows Me/VB 5.0环境下运行通过。