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