我想用VB发送一个WM_COPYDATA消息。
但是不知道怎么在我的VB另外一个程序里面接收到我的消息。
谢谢我很急,请给个简单完整的代码。要VB程序。

解决方案 »

  1.   

    SendMessage用的多 没的用国这个
    参考下这个
    http://dev-club.esnai.com/club/bbs/showEssence.asp?id=20428
      

  2.   

    楼上那个链接不错api是好东西呀
      

  3.   

    '程序1
    Private Const WM_COPYDATA = &H4A
    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 LongPrivate Type COPYDATASTRUCT
            dwData As Long
            cbData As Long
            lpData As Long
    End TypePrivate Sub Command1_Click()
      Dim cd As COPYDATASTRUCT
      Dim temp As String
      Dim Data() As Byte
      Dim m As Long
      
        m = FindWindow("ThunderRT6FormDC", "CopyData Test Form!")
      
        temp = "This is a Test Message!"
        Data = temp
        cd.cbData = UBound(Data) + 1
        cd.lpData = VarPtr(Data(0))
        cd.dwData = 0
      
        SendMessage m, WM_COPYDATA, 0, cd
    End Sub
    '程序2
    '窗体
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const SPI_GETWORKAREA        As Long = 48
        
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate Sub Form_Load()
      Dim ret As Long
      prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
      ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf Windproc)
      Me.Caption = "CopyData Test Form!"
      Me.AutoRedraw = True
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      Dim ret As Long
      ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, prevWndProc)
    End Sub
    '模块
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public 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 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)  Public Const WM_COPYDATA = &H4A
      Public Const GWL_WNDPROC = (-4)
    Public prevWndProc As LongPrivate Type COPYDATASTRUCT
            dwData As Long
            cbData As Long
            lpData As Long
    End Type
    Function Windproc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
       Dim Cd As COPYDATASTRUCT
       Dim Temp As String
       
       Select Case Msg
         Case WM_COPYDATA
           
           CopyMemory Cd, ByVal lParam, Len(Cd)
           Temp = Space(Cd.cbData)
           CopyMemory ByVal Temp, ByVal Cd.lpData, Cd.cbData
           Form1.Print StrConv(Temp, vbFromUnicode)   End Select
        
        Windproc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
    End Function
      

  4.   

    我被要求编一接口程序,通过向管理系统软件发送Windows的WM_COPYDATA消息提供,消息数据域LPARAM指向传送的数据包,LPRAM是什么?摸不着头脑,想请教一下。
      

  5.   

    LPARAM是sendmessage的一个参数,通常是指向目标数据的指针