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)