Как получить handle на editbox в IE?
01.01.2007
var hndl: HWND; main: HWND; begin main := FindWindow('IEFrame', nil); if main <> 0 then begin hndl := findwindowex(main, 0, 'Worker', nil); if hndl <> 0 then begin hndl := findwindowex(hndl, 0, 'ReBarWindow32', nil); if hndl <> 0 then begin hndl := findwindowex(hndl, 0, 'ComboBoxEx32', nil); if hndl <> 0 then begin hndl := findwindowex(hndl, 0, 'ComboBox', nil); if hndl <> 0 then begin hndl := findwindowex(hndl, 0, 'Edit', nil);
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure FindIEEditHandle; end; var Form1: TForm1; EditHandle: THandle; implementation {$R *.DFM} function EnumIEChildProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall; var tmpS: string; theClassName: string; theWinText: string; begin Result := True; SetLength(theClassName, 256); GetClassName(AHandle, PChar(theClassName), 255); SetLength(theWinText, 256); GetWindowText(AHandle, PChar(theWinText), 255); tmpS := StrPas(PChar(theClassName)); if theWinText <> EmptyStr then tmpS := tmpS + '"' + StrPas(PChar(theWinText)) + '"' else tmpS := tmpS + '""'; if Pos('Edit', tmpS) > 0 then begin EditHandle := AHandle; end; end; function IEWindowEnumProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall; {callback for EnumWindows.} var theClassName: string; theWinText: string; tmpS: string; begin Result := True; SetLength(theClassName, 256); GetClassName(AHandle, PChar(theClassName), 255); SetLength(theWinText, 256); GetWindowText(AHandle, PChar(theWinText), 255); tmpS := StrPas(PChar(theClassName)); if theWinText <> EmptyStr then tmpS := tmpS + '"' + StrPas(PChar(theWinText)) + '"' else tmpS := tmpS + '""'; if Pos('IEFrame', tmpS) > 0 then begin EnumChildWindows(AHandle, @EnumIEChildProc, longInt(0)); end; end; procedure TForm1.FindIEEditHandle; begin Screen.Cursor := crHourGlass; try EnumWindows(@IEWindowEnumProc, LongInt(0)); finally Screen.Cursor := crDefault; end; end; procedure TForm1.Button1Click(Sender: TObject); begin FindIEEditHandle; if EditHandle > 0 then Label1.Caption := IntToStr(EditHandle) else label1.Caption := 'Not Found'; end; end.
Взято с Delphi Knowledge Base: https://www.baltsoft.com/