WM_COPYDATA VB VC用法

前端之家收集整理的这篇文章主要介绍了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,(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,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,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,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
            

原文链接:https://www.f2er.com/vb/260748.html

猜你在找的VB相关文章