WM_COPYDATA VB VC用法

VC中发送消息程序

#include<windows.h>
tagCOPYDATASTRUCT my_copydata;
HWND  my_hwd;
char buff[50]="my love hahaha!";

void send_hook_pack(DWORD *pack_buff,DWORD packsize)
{
my_hwd=FindWindow(NULL,"Target");//找到目标窗口
if (my_hwd!=0)
{
 //发送数据包
 my_copydata.dwData=3;  //处理类型
 my_copydata.cbData=packsize;//数据包长度
 my_copydata.lpData=pack_buff; //数据包buff地址
 SendMessage(my_hwd,WM_COPYDATA,0,(LPARAM)&my_copydata);
} 
}

void main()
{
send_hook_pack((DWORD*)buff,sizeof(buff));
}



VB接收消息程序

form1代码

      Private Sub Form_Load()
          gHW = Me.hwnd
          Hook
          Me.Caption = "Target"
          Me.Show
          Label1.Caption = Hex$(gHW)
      End Sub

      Private Sub Form_Unload(Cancel As Integer)
          Unhook
      End Sub
        


模块代码

     Type COPYDATASTRUCT
              dwData As Long
              cbData As Long
              lpData As Long
      End Type

      Public Const GWL_WNDPROC = (-4)
      Public Const WM_COPYDATA = &H4A
      Global lpPrevWndProc As Long
      Global gHW As Long

      'Copies a block of memory from one location to another.

      Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
         (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

      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

      Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
         (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As _
         Long) As Long

      Public Sub Hook()
          lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
          AddressOf WindowProc)
          Debug.Print lpPrevWndProc
      End Sub

      Public Sub Unhook()
          Dim temp As Long
          temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
      End Sub

      Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
         ByVal wParam As Long, ByVal lParam As Long) As Long
          If uMsg = WM_COPYDATA Then
              Call mySub(lParam)
          End If
          WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, _
             lParam)
      End Function

      Sub mySub(lParam As Long)
          Dim cds As COPYDATASTRUCT
          Dim buf(1 To 255) As Byte

          Call CopyMemory(cds, ByVal lParam, Len(cds))

          Select Case cds.dwData
           Case 1
              Debug.Print "got a 1"
           Case 2
              Debug.Print "got a 2"
           Case 3
              Call CopyMemory(buf(1), ByVal cds.lpData, cds.cbData)
              a$ = StrConv(buf, vbUnicode)
              a$ = Left$(a$, InStr(1, a$, Chr$(0)) - 1)
              'Form1.Print a$
              Form1.Label2.Caption = a$
          End Select
      End Sub




 

vb发送消息 代码

窗体1

      Private Type COPYDATASTRUCT
              dwData As Long
              cbData As Long
              lpData As Long
      End Type

      Private Const WM_COPYDATA = &H4A

      Private Declare Function FindWindow Lib "user32" Alias _
         "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName _
         As String) 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

      'Copies a block of memory from one location to another.
      Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
         (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

      Private Sub Command1_Click()
          Dim cds As COPYDATASTRUCT
          Dim ThWnd As Long
          Dim buf(1 To 255) As Byte

      ' Get the hWnd of the target application
          ThWnd = FindWindow(vbNullString, "Target")
          a$ = "It Works!"
      ' Copy the string into a byte array, converting it to ASCII
          Call CopyMemory(buf(1), ByVal a$, Len(a$))
          cds.dwData = 3
          cds.cbData = Len(a$) + 1
          cds.lpData = VarPtr(buf(1))
          i = SendMessage(ThWnd, WM_COPYDATA, Me.hwnd, cds)
      End Sub

      Private Sub Form_Load()
      ' This gives you visibility that the target app is running
      ' and you are pointing to the correct hWnd
          Me.Caption = Hex$(FindWindow(vbNullString, "Target"))
      End Sub
            


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值