var H:HWND; str : array[0..127] of char; i : integer; begin H:=FindWindow(nil,'test'); //查找目标窗口 H:=FindWindowEx(H,0,'TEdit',nil);// 查找目标控件 if H<>0 then begin i := sendmessage(H,WM_GETTEXTLENGTH,0,0); sendmessage(H,WM_GetText,i+1,integer(@str)); edit1.Text := str; end; end;
H:HWND;
str : array[0..127] of char;
i : integer;
begin
H:=FindWindow(nil,'test'); //查找目标窗口
H:=FindWindowEx(H,0,'TEdit',nil);// 查找目标控件
if H<>0 then
begin
i := sendmessage(H,WM_GETTEXTLENGTH,0,0);
sendmessage(H,WM_GetText,i+1,integer(@str));
edit1.Text := str;
end;
end;
有一个活动窗口,我想得到它上面所有的控件名称并把一些文本框内容输上出,记住不是当前运行的DELPHI程序而是其它软件编的程序的窗体,只是用DELPHI编的程序去实现填充其它程序的内容.
给你思路
1. 用SPY++之类的工具查看你的目标控件的类型 比如为 CEdit
2. 然后使用FindWindow/ FindWindowEx API函数进行查询 获得目标控件的句柄
比如代码
h1 = ::FindWindow(NULL, "ShowAllProcess"); // 找到当前活动主窗口
h2 = ::FindWindowEx(h1, NULL, "Edit", NULL);
if ( h2 <> NULL)
{
::SendMessage(h2, WM_SETTEXT, 255, (LPARAM)"AAAA");
}
// 上面代码为VC代码 经测试可以运行 DELPHI也差不多。。如有问题 请再提出
输入框类名VC的是EDIT,DELPHI的是TEDIT,VB的是ThunderRT6TextBox
好象楼上说的没有通用性吧!!!如果用DELPHI写的可能可以,但是用VC写的或用VB写的,难说!!
呵呵 其实都是通过相同的API进行获取的 其他的 只是一些基本语法不同而已 我只是懒得写DELPHI代码 其中的思路 都一样....