我想写个程序,驻留在内存里。然后,我按F10的功能就可以实再按下ALT+TAB的功能。
解决方案 »
- SQL按条件分n个字段??
- 如何使WINSOCK发送和返回的数据不被截包软件截取到
- 怎么样把DataGrid中的数据导出到Excel?
- 弱智问题
- Oracle Objects for OLE及在VB中的应用,怎样实现事物回滚?
- 使用printer代码打印报表,在EPSON1600K上一切正常,但换了台打印机后打印时,系统提示插入纸张.
- 如何判断字符串中存在 “/”????
- 不用任何控件,连接dbf数据表的方法。
- VB好象在未经你同意下的情况把一些数据同过NET传出去,请专家来看一下
- 关于删除数据库的问题,请大家帮忙!!!!!!!
- 高手救我!!!!(小弟在线等。谢谢)
- 关于为已有表创建字段的问题!
Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal _
hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE' Type Declarations
Private Type KBDLLHOOKSTRUCT
vkCode As Long
End Type' Win32 API
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 CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDest As Any, _
pSource As Any, _
ByVal cbLength As Long)
' Constants
Private Const WH_KEYBOARD_LL = 13& ' Hook Flag
Private Const HC_ACTION = 0& ' Keyboard Process Message
' Variables
Private m_hLLKeyboardHook As Long ' The hook object
Public g_bInterceptKeys As Boolean ' Flag
Dim hform As Long
Dim hnextform As Long
Dim hpass As Long
Dim cLong As Long
Dim astr As String * 256Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
' Set up the hook object
Static tKeyboardHook As KBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Call CopyMemory(tKeyboardHook, ByVal lParam, Len(tKeyboardHook)) ' Display some info on the form
If tKeyboardHook.vkCode = 121 Then
SendKeys "%{TAB}", True '发送ALT+TAB
Call UnSetSystemWideKeyboardHook
Else
Exit Function
End If
End If
If g_bInterceptKeys Then
' Intercept the key and don't pass it along the hook chain
LowLevelKeyboardProc = 1
Exit Function
End If
' If the message is not one we want to trap, pass it along
' through the hook chain to the intended app
LowLevelKeyboardProc = CallNextHookEx(m_hLLKeyboardHook, nCode, wParam, lParam)End FunctionPublic Function SetSystemWideKeyboardHook() As Long ' Hook into the keyboard process
' Specifying 0 for the last parameter (dwThreadId) indicates a system wide
' hook
If m_hLLKeyboardHook = 0 Then
m_hLLKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0&)
End If If m_hLLKeyboardHook = 0 Then
SetSystemWideKeyboardHook = 0
Else
SetSystemWideKeyboardHook = 1
End IfEnd FunctionPublic Function UnSetSystemWideKeyboardHook() As Long ' Unhook from the keyboard process
If m_hLLKeyboardHook <> 0 Then
Call UnhookWindowsHookEx(m_hLLKeyboardHook)
m_hLLKeyboardHook = 0
UnSetSystemWideKeyboardHook = 1
Else
UnSetSystemWideKeyboardHook = 0
End IfEnd Function
窗体代码
Option ExplicitPrivate Sub Form_Load()
Form1.Visible = False
Call SetSystemWideKeyboardHook
End Sub
差别在这里
If (tKeyboardHook.vkCode = vbKeyA) And (wParam = 256) Then
Call keybd_event(vbKeyB, 0, 0, 0)
LowLevelKeyboardProc = 1
Exit Function
End If
现在实现a到b的转化,你可以改成你要的,注意我加了wParam = 256这个条件,因为一次看见产生两个消息,如果不判断就发送两次新键
将LowLevelKeyboardProc 返回非0值,按照msdn,它将拦截掉这个消息