我有两个窗体Form1,Form2
Form1是一个开多线程的窗体,Form2中定义了一个函数向别的软件发送消息的
Form1中代码是这样的: CS.Enter;//进临界
while not Form2.changproxy() and IsSt do sleep(300);
CS.Leave;
Form2中函数是这样的
function TTpFom.changproxy():boolean ;
var
WndCaption: array[0..100] of Char;
begin
result:=false;
SendMessage(Hwnd4, WM_GETTEXT, 1024, Integer(@WndCaption));
if string(wndCaption)<>''then
result:=true;
end;
原先Form1不使用多线程执行很正常从来没出过问题,现在换成多线程了就出问题了 WndCaption新打开的时候能取到值,运行一会儿就取不到值,有时根本就取不到值.不知道这是什么问题,后来我用 后来我不用数组用Pchar就没有问题能正常取值,
getmem(buf,len);
SendMessage(Hwnd4,WM_GETTEXT,Len+1,Int64(buf));
请问一下我这种情况是什么原因产生的.好像是数组存不进值似的
Form1是一个开多线程的窗体,Form2中定义了一个函数向别的软件发送消息的
Form1中代码是这样的: CS.Enter;//进临界
while not Form2.changproxy() and IsSt do sleep(300);
CS.Leave;
Form2中函数是这样的
function TTpFom.changproxy():boolean ;
var
WndCaption: array[0..100] of Char;
begin
result:=false;
SendMessage(Hwnd4, WM_GETTEXT, 1024, Integer(@WndCaption));
if string(wndCaption)<>''then
result:=true;
end;
原先Form1不使用多线程执行很正常从来没出过问题,现在换成多线程了就出问题了 WndCaption新打开的时候能取到值,运行一会儿就取不到值,有时根本就取不到值.不知道这是什么问题,后来我用 后来我不用数组用Pchar就没有问题能正常取值,
getmem(buf,len);
SendMessage(Hwnd4,WM_GETTEXT,Len+1,Int64(buf));
请问一下我这种情况是什么原因产生的.好像是数组存不进值似的
2. 其次Form2代码中指定缓冲区是101个字符. 但是sendmessage 确传入1024, 这会导致不定的错误.
3. 不要用String(wndCaption)来强制转换, 不是一样的东西.
4. 你要取值,请用StrPas(wndCaption)
你说的第二个问题确实存在,因为取得的字不会超过50个字,所以从来没出过错,本身是有问题,谢谢你的提点以后改正主要是我为什么用线程调用就会有取不值的情况,在form1主线程中调就不会有这个问题,请告诉一下这个问题要怎么解决,谢谢
SendMessage(Hwnd4, WM_GETTEXT, 1024, Integer(@WndCaption));
只是在发送消息后WndCaption的值不变,还是全是0
SendMessage(Hwnd4, WM_GETTEXT, 1024, Integer(@WndCaption));
内存不出错,在多线程的时候会造成内存乱了,有内存有保护所以写不进WndCaption,
Hwnd4绝对没有问题,别的方法能取,有的时候第一次能取第二次就不能,我感觉跟那大小有关不知道你的看法呢
function TTpFom.changproxy():boolean ;
var
WndCaption: array[0..100] of Char;
begin
result:=false;
SendMessage(Hwnd4, WM_GETTEXT, Length(wndCaption), Integer(@WndCaption));
if string(wndCaption) <>''then
result:=true;
end;