已经得到其他程序窗口的句柄 如何获得和设置文字呢?(100分)

  • 主题发起人 主题发起人 tianhuo_soft
  • 开始时间 开始时间
T

tianhuo_soft

Unregistered / Unconfirmed
GUEST, unregistred user!
先是通过FindWindow 函数找到这个窗体
然后通过EnumChildWindows函数枚举了这个窗体所有的控件
我想得到EDIT这个控件上的内容 应该怎么实现呢?
 
用 GetWindowText 和 SetWindowText
 
procedure TForm1.Button1Click(Sender: TObject);
var
FHandle: THandle;
FCaption: String;
FTextLen: Integer;
begin
// FHandle := Handle;
//这个是 Edit 的句柄
FTextLen := SendMessage(FHandle, WM_GETTEXTLENGTH, 0, 0);
SetLength(FCaption,FTextLen + 1);
GetWindowText(FHandle,PChar(FCaption),FTextLen + 1);
Caption := Copy(FCaption,1,FTextLen);
SetWindowText(FHandle,'NewCaption');
end;
 
FindWindow找到句柄
GetWindowText获取文字
SetWindowText设置文字
详细用法和参数请摆渡
 
FTextLen := SendMessage(FHandle, WM_GETTEXTLENGTH, 0, 0);
SetLength(FCaption,FTextLen + 1);
GetWindowText(FHandle,PChar(FCaption),FTextLen + 1);
Caption := Copy(FCaption,1,FTextLen);
SetWindowText(FHandle,'NewCaption');
只能获得该窗口创建时就已经设计好的值,不能获得改变后的值
 
.........晕!
笨但简单的方法:
要获得实时的值,用个 TTimer 循环去读吧。
 
我是这样做的 可是还不行啊啊~! 哭……
 
贴代码上来看看。
 
function EnumChildWndProc(AhWnd:LongInt;
AlParam:lParam):boolean;stdcall;
var
WndClassName: array[0..254] of Char;
WndCaption: array[0..254] of Char;
FCaption: String;
FTextLen: Integer;
begin
GetClassName(AhWnd,wndClassName,254);
GetWindowText(aHwnd,WndCaption,254);
with form1.memo1do
begin
lines.add( string(wndClassName));
lines.add( string(wndCaption));
lines.add('-------');
end;
result:=true;
if string(wndClassName)='Edit' then
begin
// l:=SendMessage(AhWnd,WM_GETTEXT,225,longint(s));
FTextLen := SendMessage(aHwnd, WM_GETTEXTLENGTH, 0, 0);
SetLength(FCaption,FTextLen + 1);
GetWindowText(aHwnd,PChar(FCaption),FTextLen + 1);
s:= Copy(FCaption,1,FTextLen);//这里原来是Caption我改成了S
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
hWnd:LongInt;
begin
memo1.Lines.Clear;
Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');
hWnd:=FindWindow(nil,pchar(Edit1.Text));
{FindWindowEx(0,0,'TForm1','登陆窗口');}
if hWnd<>0 then
EnumChildWindows(hWnd,@EnumChildWndProc,0)
else
MessageBox(self.handle,'没找到该窗口句柄','提示',0);
end;
 
好像没问题啊,你遇到了什么问题?
 
后退
顶部