先看看下面这个程序
Option Explicit
Dim m() As Byte
Dim FLen As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Const SW_SHOWNORMAL = 2
Private Const GWL_STYLE = (-16)
Private Const WS_CLIPSIBLINGS = &H4000000
Private Const WS_VISIBLE = &H10000000Private Sub Timer1_Timer()
Dim Handle As Long, Ret As Long
Handle = FindWindow(vbNullString, "记事本 - 记事本")
Ret = SetWindowLong(Handle, GWL_STYLE, WS_VISIBLE Or WS_CLIPSIBLINGS)
SetParent Handle, Me.hwnd
End Sub
这个程序将一个记事本嵌入到我自己的程序里面.
但是我要用postmessage函数对记事本里的edit发送键..
都不能发送.高手说说把程序挂到自己的程序里面后.还能不能实现发送键呢?
一定要用postmessage.或者可以不防碍我做事的方法?

解决方案 »

  1.   

    要向记事本发送一个"5"都没有效果
    直接没有把记事本挂入就可以实现发送5
    Option Explicit
    Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) 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 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 Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101
    Private 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
    Private Function makelparam(ByVal VirtualKey As Long, ByVal flag As Boolean) As Long
        Dim s As String
        Dim Firstbyte As String
        If flag = False Then '
            Firstbyte = "00"
        Else
            Firstbyte = "C0"
        End If
        Dim Scancode As Long
        Scancode = MapVirtualKey(VirtualKey, 0)
        Dim Secondbyte As String
        Secondbyte = Right("00" & Hex(Scancode), 2)
        s = Firstbyte & Secondbyte & "0001"
        makelparam = Val("&H" & s)
    End Function
    Private Sub Timer1_Timer()
        Dim jsb As Long
        jsb = FindWindow("记事本 - 记事本", vbNullString)
        Dim mhwnd As Long
        mhwnd = FindWindowEx(jsb, 0, "edit", vbNullString)
        Dim lParam As Long
        lParam = makelparam(vbKey5, False)
        PostMessage mhwnd, WM_KEYDOWN, vbKey5, lParam
        lParam = makelparam(vbKey5, True)
        PostMessage mhwnd, WM_KEYUP, vbKey5, lParam
    End Sub