C++Builder 程序员博客
3 Aug
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窗口标题!
不过有时候更改不成功的!有时候会更改成功!
手头上有个程序,用的是borland写的,有个TMGrid类,我现在想通过sendmessage取出TMGrid的行,列,应该怎么弄?
试过用lvm类的message,好像不行。
没有头文件啊。只有一个单独的程序。
文件大不大?不大传上来如何?
文件不大,但是需要连上设备,没有设备不能运行
我用OllyICE看了一下,好像是TStringGrid继承过来的。
0040E537 ¦. E8 D83E0400 call <jmp.&VCL50.Grids::TStringGrid::SetCells>
以前的代码找不到了. 只记得大概了.
先获得TMGrid的Handle, 然后通过发送 RM_GetObjectInstance 消息, 然后把转换了TStringGrid 直接读取行,列的值. 还用到了一个EnumProps.
当时是取DBGrid中的数据, D7,BCB6 写的程序肯定没有问题. 其它的未测试.
好像没那么简单,呵呵.
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!
18 May
获得了另外一个软件中RichEdit的句柄,想从自己的程序中发送消息到这个RichEdit,可是每次只显示第一个字符,
不知为什么,请教?
AnsiString strTemp = "SendMessage to RichEdit"; SendMessage(hRichEdit,WM_SETTEXT,strTemp.Length()+1,(LPARAM)strTemp.c_str()); // 结果RichEdit中只显示了第一个字母S
可以发送WM_GETTEXT消息来获得那个RichEdit的内容,可就是不能SETTEXT…….
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
谢谢!