得到别的程序的窗口句柄,改变窗口标题,要改变窗口文本框内容程序如下
unit unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls; type TForm1 = class(TForm) button2: TButton; ListBox1: TListBox; Button1: TButton; procedure tutton2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function GetText(Wnd : HWND) : string; var textlength : integer; text : PChar; begin textlength:=SendMessage(Wnd,WM_GETTEXTLENGTH,0,0); if textlength=0 then Result := '' else begin getmem(text,textlength+1); SendMessage(Wnd,WM_GETTEXT,textlength+1,Integer(text)); Result:=text; freemem(text); end; end; function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall; var st:string; begin Result := True; if (IsWindowVisible(Wnd)) and (GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) and (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin st:=GetText(Wnd); Form1.Listbox1.items.add(st); end; end; procedure TForm1.tutton2Click(Sender: TObject); var Param : Longint; begin Form1.Listbox1.Clear; Param := 0 ; EnumWindows(@EnumWindowsProc , Param); end; procedure TForm1.Button1Click(Sender: TObject); function EnumChildWindowsProc(hwnd: Integer; lparam: Longint):Boolean; stdcall; var buffer: array[0..255] of Char; begin Result := True; GetClassName(hwnd,buffer,256); if StrPas(Buffer)='TEdit' then begin PInteger(lparam)^ := hwnd; Result:=False; end; end; var Handle: Integer; buffer: Array[0..1023] of Char; begin Handle := FindWindow(nil,pchar(Form1.listbox1.Items[listbox1.ItemIndex])); if Handle<>0 then begin EnumChildWindows(Handle,@EnumChildWindowsProc,Integer(@Handle)); SendMessage(Handle,WM_SETTEXT,0,Integer(pchar('你所需要填写的文本'))); end; end; end.