标题用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环境下运行通过。