我爱builder

C++Builder 程序员博客

c++的dll代码:
  char string1[1000]="第二窗口";
  ……
  //向vb窗口发送74消息
  SendMessage(m_hWnd,74,strlen(string1),(LPARAM)&string1);
  //dll标记1

vb的窗口函数处理代码:
      Private Sub Form_Load()
          Me.Caption = "我的窗口"
          …..
      End Sub
      Public Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
          Dim a() As Byte, i As Long, str1 As String
          If 74 = uMsg Then
              ReDim a(wParam - 1)
              CopyMemory a(0), ByVal lParam, wParam
              str1 = StrConv(a, vbUnicode)
              Form1.Text1 = Form1.Text1 + Chr(13) + Chr(10) + str1
              WndProc = 0
          Else
              WndProc = CallWindowProc(GetProp(hWnd, OLDWNDPROC), hWnd, uMsg, wParam, lParam)
          End If

vb窗口程序加载了dll
为什么当dll运行到dll标记1的地方,vb窗口的标题有原来的"我的窗口"被改为:"第二窗口"?
我也尝试过用:12消息SendMessage(m_hWnd,12,strlen(string1),(LPARAM)&string1);可就要么得不到消息,要么跟上面一样?为什么?如何解决?

If 74 = uMsg Then
              ReDim a(wParam - 1)
              CopyMemory a(0), ByVal lParam, wParam
              str1 = StrConv(a, vbUnicode)
              Form1.Text1 = Form1.Text1 + Chr(13) + Chr(10) + str1
              WndProc = 0

看你的代码呀

你这个窗口收到74号消息时会执行这里的东东,所以窗口的标题会被更改!

这样的代码也是不行的:
If 12 = uMsg Then
              ReDim a(wParam - 1)
              CopyMemory a(0), ByVal lParam, wParam
              str1 = StrConv(a, vbUnicode)
              Form1.Text1 = Form1.Text1 + Chr(13) + Chr(10) + str1
              WndProc = CallWindowProc(GetProp(hWnd, OLDWNDPROC), hWnd, uMsg, wParam, lParam)
End If
WndProc = CallWindowProc(GetProp(hWnd, OLDWNDPROC), hWnd, uMsg, wParam, lParam)

如何解决?

?

怎么VB的代码跑这来了?

Form1.Text1 = Form1.Text1  + str1

我的代码没有问题!
是:74号和12号消息的问题!
那消息在系统操作过程中,系统会认为用户要用发去的字符串去代替vb窗口标题!所以系统回想办法去更改vb窗口标题!
不过有时候更改不成功的!有时候会更改成功!

  • Filed under: C++ Builder
  • 手头上有个程序,用的是borland写的,有个TMGrid类,我现在想通过sendmessage取出TMGrid的行,列,应该怎么弄?

    试过用lvm类的message,好像不行。

    没有头文件啊。只有一个单独的程序。

    文件大不大?不大传上来如何?

    文件不大,但是需要连上设备,没有设备不能运行

    我用OllyICE看了一下,好像是TStringGrid继承过来的。

    0040E537  &brvbar.  E8 D83E0400  call    <jmp.&VCL50.Grids::TStringGrid::SetCells>

    :(
    以前的代码找不到了. 只记得大概了.

    先获得TMGrid的Handle, 然后通过发送 RM_GetObjectInstance 消息, 然后把转换了TStringGrid 直接读取行,列的值. 还用到了一个EnumProps.

    当时是取DBGrid中的数据, D7,BCB6 写的程序肯定没有问题. 其它的未测试.

    好像没那么简单,呵呵.

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
    不知为什么,请教?

    C/C++ code
    AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S

    可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….

    C/C++ code
    char s[200]="hello world"; SendMessage(RichEdit1->Handle,WM_SETTEXT,0,(LPARAM)s);

    第3个参数貌视不用填吧?

    mark

    char strTemp[] = "SendMessage to RichEdit";
    SendMessage(hRichEdit,WM_SETTEXT,0,(LPARAM)strTemp);

    对,第三个参数是0
    谢谢!

  • Filed under: C++ Builder
  • 类别

    最新

    标签

    链接


    存档