[VB6] - about sendmessage() api function
Code:
Option Explicit
Private PrevWin2 As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const GWL_WNDPROC = (-4)
Public UsercontrolHandle As Long
Private Const WM_PAINT = &HF
Private Const WM_KEYDOWN = &H100
Private Const WM_CLOSE = &H10
Private Const WM_DESTROY = &H2
Private Function Proc2(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_PAINT Then
SendMessage HWnd, WM_KEYDOWN, 1000, 0
'Debug.Print "hi"
ElseIf Msg = WM_DESTROY Then
Unhook2 HWnd
End If
Proc2 = CallWindowProc(PrevWin2, HWnd, Msg, wParam, lParam)
End Function
Public Sub Hook2(Handle As Long)
If PrevWin2 = 0 Then
PrevWin2 = SetWindowLong(Handle, GWL_WNDPROC, AddressOf Proc2)
End If
End Sub
Public Sub Unhook2(Handle As Long)
If PrevWin2 Then
Call SetWindowLong(Handle, GWL_WNDPROC, PrevWin2)
PrevWin2 = 0
End If
End Sub
why sendmessage() crashes my VB6?(instead use the sendmessage(), i use the debug, the VB6 don't crashes)
Re: [VB6] - about sendmessage() api function
Probably because you're not suppose to send the WM_KEYDOWN message, especially if the wParam and lParam parameters are incorrect. It should also be paired with the corresponding WM_KEYUP message. If you really wanted to send a keystroke, then why not use SendKeys or the APIs keybd_event or SendInput?
Re: [VB6] - about sendmessage() api function
Quote:
Originally Posted by
Bonnie West
Probably because you're not suppose to send the
WM_KEYDOWN message, especially if the wParam and lParam parameters are incorrect. It should also be paired with the corresponding
WM_KEYUP message. If you really wanted to send a keystroke, then why not use
SendKeys or the APIs
keybd_event or
SendInput?
in these case, i can use any;)
is for catch the Paint message;)