如何取得其他窗口的文本?(300分)

  • 主题发起人 主题发起人 netspur
  • 开始时间 开始时间
N

netspur

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何取得ICQ等软件的消息发送窗口里面的文本?

已经知道了此窗口的handle了。
 
GetWindowText(Handle, Text, MaxLen)
 
没说的了。。。。。
看看GetWindowText的msdn吧。
 
供参考:
while 窗口句柄<>0 do
begin
if GetWindowText(窗口句柄,@wintext,255)>0 then
memo1.lines.add(strpas(@wintext));
end;
//得到窗口名称
 
但是我想得到的是这窗口里面的编辑框的文本啊,并不是这窗口的标题。
是不是要取得此编辑框的句柄呢?请问如何取得?取得之后是调用getwindowtext吗?
 
有了窗体的Handle,就可以枚举它的子窗体。
 
能贴几行例程出来吗?
 
要先取得此编辑框的句柄呢,
取得之后不能调用getwindowtext,因为这个函数不能取得别的进程的edit的文本
应该使用SendMessage发送WM_GETTEXT的方法得到文本
 
取得此编辑框的句柄的方法,如果对方是delphi写的,先不讨论,如果是qq之类非delphi的,
用DIALOG资源创建的对话框,那么可以使用 GetDlgItem 得到edit的handle
GetDlgItem需要使用控制id,这个id经常是固定的(对方是delphi写的不是)
得到这个固定的id值的办法:一些查窗口的程序可以显示,但是WinSight没有提供这个值
解决的办法是,(只需要做一次,得到id值就可以了)用winsight查到这个edit的handle
不要关闭窗口,马上写一个小程序用 GetDlgCtrlID 得到他的id值,这个id可以用在上面的
GetDlgItem(对方是delphi写的程序就不是)
如果是qq,那么这个方法是可行的
 
GetWindowText(Handle, Text, MaxLen)
就可以解决你的问题了
 
小花,不许乱说,GetWindowText不能取得别的进程的edit的文本
This function cannot retrieve the text of an edit control in another application.
 
假設你取到該窗口編輯框的句柄handle1;
可以:
var str:array [0..225] of char;
len1:integer;
begin
len1:=sendmessage(handle1,wm_gettextlength,0,0);
sendmessage(handle1,wm_gettext,len1+1,integer(@str));
showmessage(str); //str為編輯框的字符值
end;
 
这里有万能的方法,
找到句炳,用delphi光盘上的sndkey32,sendkey(),
ctrl+A,然后ctrl+c,哈哈,
哈哈哈,想法而已,回去试试看.
 
是啊,关键是如何得到这编辑框的句柄?
Pipi兄说了一下,我还是不是很明白,请那位大虾贴几行程序提示一下?
 
用WindowFromPoint()函數,可得點所在句柄。
如得當前鼠標所在句柄:
var point1:tpoint;
handle1:thandle;
begin
getcursorpos(point1);
handle1:=WindowFromPoint(point1); //句柄
end;
 
多人接受答案了。
 
你这样,用
var
p:Tpoint;
Buf: array[0..1024] of Char;
SetWindowPos(Form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE);
GetCursorpos(p);
WindowFromPos(p);找到鼠标所指地方句炳。
GetClassName(Handle, Buf, 1024);
ClassEdit.Text := Buf;//看到了吧这就是这个文本框的classname

这样你就可以用
findwindow()和findwindowEX()来得到它的句炳。
然后用SendMessage(Handle, WM_GETTEXT, ,,);
得到文本框的内容,而不用管他是什么语言开发的。
历程你可以看这里。

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1008932

相应的把static换成你所得到的那个文本框的classname。
//QQ
procedure TForm1.Button1Click(Sender: TObject);
var
handle:THandle;
buf:array[0..1024] of char;
begin
handle:=FindWindow(nil,'发送消息');
handle:=FindWindowEX(handle,0,'Edit',nil);
SendMessage(handle,WM_GetText,1024,Integer(@buf));
memo1.Text:=buf;
end;

ok了?散分吧。
 

Similar threads

后退
顶部