几个API函数用法?
有谁知道以下函数用法:
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private 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
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
能附点中文说明或举个例子最好不过了:-)
问题点数:30、回复次数:3Top
1 楼songyangk(小草)回复于 2002-06-21 09:02:22 得分 5
www.allapi.net
里面有几乎所有API函数的详解和VB的例子,你可以去看一下。虽然是英文的,但确实是个好东西。Top
2 楼maoqingfeng(千里孤坟)回复于 2002-06-21 09:13:50 得分 5
GetKeyState
针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态
参数 nVirtKey ,欲测试的虚拟键键码。对字母、数字字符(A-Z、a-z、0-9),用它们实际的ASCII值
Top
3 楼sunxl(小呆)回复于 2002-06-21 09:30:44 得分 20
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 Sub
003 使回车具有 Tab 的功能 98-7-04
在 VB 中,使用回车结束一个录入时,光标不能自动移到下个对象。解决方法是在该对象的 KeyPress 事件中增加以下的代码:
If KeyAscii = 13 Then
SendKeys "{Tab}"
KeyAscii = 0
End If
98-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 Long
Private 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 Sub
98-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 Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public 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
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const WH_KEYBOARD = 2
Public Const KBH_MASK = &H20000000
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Global 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 Function
Private Sub Form_Load()
'将 KeyboardProc 连接到中断上
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnhookWindowsHookEx(hHook)
End Sub
Top




