这个代码,如果handle是本程序的RichEdit,那么一切正常。但是如果RichEdit在另外的程序上,那么WM_GETTEXTLENGTH能得到正确的结果。而EM_GETTEXTRANGE得不到。查了MSDN,好像Sendmessage在进程间传USER 定义的消息时不能直接传。要经过特别的步奏。没有这方面的经验。请指教。
function TForm1.GetText(_handle:hwnd):string;
var iLength:integer;
tRange:TEXTRANGE;
sText:String;
n_Ret:Integer;
begin iLength:=SendMessage(_handle,WM_GETTEXTLENGTH,0,0);
Result:='';
if iLength=0 then Exit;
sText:='';
setLength(sText,iLength+1); tRange.chrg.cpMin:=0;
tRange.chrg.cpMax:= iLength+1;
tRange.lpstrText :=pChar(sText);
n_Ret:=sendMessage(_handle,EM_GETTEXTRANGE,0,Longint(@tRange));
Form1.Edit2.Text:=IntToStr(iLength);
Form1.Edit1.Text:=IntToStr(n_Ret);
Result:=sText;
end;//得到另外应用的RichEdit的内容
procedure TForm1.Button1Click(Sender: TObject);
var
_hWnd_Win,_hWnd_Edt: HWND;
nLen: Integer;
Buff: String;begin
_hWnd_Win := FindWindow('TForm1','111');
_hWnd_Edt := FindWindowEx(_hWnd_Win,0, 'TRichEdit',nil);
if _hWnd_Edt<>0 then
Begin
Buff := GetText(_hWnd_Edt);
end;
memo1.Lines.Add(Buff);
end;
function TForm1.GetText(_handle:hwnd):string;
var iLength:integer;
tRange:TEXTRANGE;
sText:String;
n_Ret:Integer;
begin iLength:=SendMessage(_handle,WM_GETTEXTLENGTH,0,0);
Result:='';
if iLength=0 then Exit;
sText:='';
setLength(sText,iLength+1); tRange.chrg.cpMin:=0;
tRange.chrg.cpMax:= iLength+1;
tRange.lpstrText :=pChar(sText);
n_Ret:=sendMessage(_handle,EM_GETTEXTRANGE,0,Longint(@tRange));
Form1.Edit2.Text:=IntToStr(iLength);
Form1.Edit1.Text:=IntToStr(n_Ret);
Result:=sText;
end;//得到另外应用的RichEdit的内容
procedure TForm1.Button1Click(Sender: TObject);
var
_hWnd_Win,_hWnd_Edt: HWND;
nLen: Integer;
Buff: String;begin
_hWnd_Win := FindWindow('TForm1','111');
_hWnd_Edt := FindWindowEx(_hWnd_Win,0, 'TRichEdit',nil);
if _hWnd_Edt<>0 then
Begin
Buff := GetText(_hWnd_Edt);
end;
memo1.Lines.Add(Buff);
end;
解决方案 »
- 请叫 如何 更改 自己程序的音量 而不是 更改系统的音量?
- RB5生成的报表直接转为RTF文件可以吗?
- 画光标的消息 是什么??
- SQL嵌套
- 关于定时器的问题
- 一个头痛的DELPHI问题
- 各位高手,请教关于数据库用户登陆的问题!(急!)
- DBGRID中如何动态统计并所选记录的汇总数值???
- 用sql语句,怎样把数据库中的一个表复制给另一个数据库。
- 拖了一个世纪的问题!!!访问中国软件时出现“找不到服务器”错误!系统重装也不行!
- Delphi高手们,救火啊!!!请问:VC中的 RCV_DATA * pHeader=(RCV_DATA*)lPara; (RCV_DATA是一个记录类型)转成delphi格式,该如何表示?给分!!!
- 斑竹,怎么给分啊?
你看看这种方法行不行
在我的机子上调试通过procedure TForm1.Button1Click(Sender: TObject);
var
dd,hh: hwnd;
i: integer;
mem: pchar;
begin
dd := FindWindow(nil,'SendMsg');
if dd>0 then
begin
hh := FindwindowEx(dd,0,pchar('TRichEdit'),nil);
if hh>0 then
begin
i := SendMessage(hh,WM_GETTEXTLENGTH,0,0);
getmem(mem,i+1);
SendMessage(hh,WM_GETTEXT,i+1,LongInt(mem));
showmessage(strpas(mem));
end
else
showmessage('no such window');
end;
getmem(mem,0);
end;