www.allapi.net
里面有几乎所有API函数的详解和VB的例子,你可以去看一下。虽然是英文的,但确实是个好东西。

解决方案 »

  1.   

    GetKeyState
    针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态
    参数 nVirtKey ,欲测试的虚拟键键码。对字母、数字字符(A-Z、a-z、0-9),用它们实际的ASCII值 
      

  2.   

    006 突破 SendKeys 的限制 98-8-22
    SendKeys 不能实现一些特殊的键, 如 Alt+PrintScr 。 不过使用 API ,可以改变这样的状况。
    声明:
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    使用:
    ' 一个抓屏的例子
    Const VK_SNAPSHOT As Byte = &H2C
    ' 把应用窗口图象放到剪贴板:
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
    '  把整个屏幕抓到剪贴板:
    Call keybd_event(VK_SNAPSHOT, 1, 0, 0)
    可以用该方法抓 AVI 图象。005 让窗口拒绝接受键盘和鼠标事件 98-7-29
    声明:
    Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
    使用:
    '拒绝接受键盘和鼠标事件
    Call EnableWindow(Form.hwnd, 0)
    '允许接受键盘和鼠标事件
    Call EnableWindow(Form.hwnd, 1)004  对象是使用 TAB 键还是鼠标激活的
    声明:
    Declare Function GetKeyState% Lib "User32" (ByVal nVirtKey%)
    Const VK_TAB = 9
    使用:
    Sub Text1_GotFocus ()
    If GetKeyState(VK_TAB) < 0 Then
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1.Text)
    ' 使用了 TAB 键
    Else
    Text1.SelLength = 0
    ' 使用了 MOUSE 
    End If
    End Sub003 使回车具有 Tab 的功能 98-7-04
    在 VB 中,使用回车结束一个录入时,光标不能自动移到下个对象。解决方法是在该对象的 KeyPress 事件中增加以下的代码:If KeyAscii = 13 Then
    SendKeys "{Tab}"
    KeyAscii = 0
    End If98-7-04 更新:如果表单中有许多对象,在所有的对象中增加以上的代码是繁琐的,解决方法是:设置表单的 KeyPreview 属性为 True,在表单的 KeyPress 中增加以上的代码。而对于无须该功能的对象,如按钮,将其 TabStop 设置为False。002  禁止使用 Alt-Tab 或 Ctrl-Alt-Del 98-7-22
    Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Integer, ByVal aBOOL As Integer) As Integer
    Private Declare Function IsWindowEnabled Lib "user32" (ByVal hWnd As Integer) As Integer
    Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Integer) As Integer
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As LongPrivate TaskBarhWnd As Long
    Private IsTaskBarEnabled As Integer
    Private TaskBarMenuHwnd As Integer
    '禁止或允许使用 Alt-Tab
    Sub FastTaskSwitching(bEnabled As Boolean)
    Dim X As Long, bDisabled As Long
    bDisabled = Not bEnabled
    X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
    End Sub
    '禁止使用Ctrl-Alt-Del
    Public Sub DisableTaskBar()
    Dim EWindow As Integer
    TaskBarhWnd = FindWindow("Shell_traywnd", "")
    If TaskBarhWnd <> 0 Then
    EWindow = IsWindowEnabled(TaskBarhWnd)
    If EWindow = 1 Then 
    IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 0)
    End If
    End If
    End Sub
    '允许使用Ctrl-Alt-Del
    Public Sub EnableTaskBar()
    If IsTaskBarEnabled = 0 Then
    IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 1)
    End If
    End Sub98-7-22 禁止 Ctrl+Alt+Del 
    声明(For Win95):
    Const SPI_SCREENSAVERRUNNING = 97
    Private Declare Function SystemParametersInfo Lib "user32" Alias _
    "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
    lpvParam As Any, ByVal fuWinIni As Long) As Long
    使用:
    '禁止
    Dim pOld As Boolean
    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
    '开启
    Dim pOld As Boolean
    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)001 如何过滤键盘录入
    在 VB 的应用得到以前就处理键盘动作, 实现对键盘的全面控制, 可过滤任意的键。 下面的例子过滤了 CTRL+C 键, 并把该键模拟为在 Command1 上单击。 Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As LongPublic Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongPublic Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Const WH_KEYBOARD = 2
    Public Const KBH_MASK = &H20000000
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202Global hHook As Long'KeyboardProc 在 VB 应用动作前发生
    Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If nCode >= 0 Then
    '处理你希望过滤的键
    If wParam = Asc("C") And (lParam And KBH_MASK) <> 0 Then
    If (lParam And &HC0000000) = 0 Then
    '模拟在Command1 中单击
    Form1.Command1.SetFocus
    Call PostMessage(Form1.Command1.hwnd, WM_LBUTTONDOWN, 0, &H20002)
    Call PostMessage(Form1.Command1.hwnd, WM_LBUTTONUP, 0, &H20002)
    KeyboardProc = 1
    Exit Function
    End If
    End If
    End If
    KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
    End FunctionPrivate Sub Form_Load()
    '将 KeyboardProc 连接到中断上
    hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Call UnhookWindowsHookEx(hHook)
    End Sub