![]() |
Button finden und betätigen
Hallöchen,
wie finde ich auf einer Registerkarte einen Button und betätige ihn? Vielen Dank. Grüsse, Daniel :hi: |
Moin Daniel,
meinst Du jetzt auf irgendeinen Button auf einem Tabsheet, oder den mit dem man ein bestimmtes Tabsheet auswählt? Ausserdem: In Deinem Programm, oder einem fremden? |
Moin Christian,
Du hast ja auch den Thread gelesen, wo es drum ging den Verlauf zu leeren. Ich habe jetzt einen Weg gefunden, die IE-Einstellungen zu öffnen und den richtigen Reiter anzuzeigen. Nun muss ich noch irgendwie den Verlauf-Button betätigen. Dazu muss ich ihn erstmal finden. Und dann betätigen, die Abfrage die anschliessend kommt, kann man ja lassen. Grüsse, Daniel :hi: |
Moin Daniel,
um den Button zu finden, gibt es die schönen Funktionen FindWindow/EnumWindow/EnumChildWindow. Wenn Du dann das Handle den Button hast, kannst Du mit SendMessage eine BM_CLICK Message an diesen Senden. Wie hast Du den Dialog geöffnet? |
Moin Chritian,
Zitat:
Zitat:
Delphi-Quellcode:
Die 0 ist der Index des Reiters, also desjenigen der beim ausführen aktiv sein soll.
procedure TForm1.Button15Click(Sender: TObject);
begin ShellExecute(Handle, nil, 'rundll32.exe', 'shell32.dll,Control_RunDLL inetcpl.cpl,,0', nil, SW_SHOW); end; Da es 7 Reiter gibt, gehts also von 0 bis 6! Irgendwi eLogisch nicht? ;) Grüsse, Daniel :hi: |
Moin Daniel,
daran, dass es sich um eine CPL handelt hatte ich gar nicht gedacht ;-) Probier's mal damit (bis auf das Ausführen des BM_CLICK ist's getestet)
Delphi-Quellcode:
procedure TfrmMAIN.Button1Click(Sender: TObject);
function EnumChildProc(const AhWindow : DWORD;const ADummy : PDWORD) : Boolean; stdcall; var pBuffer : PChar; dwSize : DWORD; begin Result := true; dwSize := 255; pBuffer := AllocMem(dwSize); try if GetClassName(AhWindow,pBuffer,dwSize) = 0 then begin exit; end; if trim(pBuffer) <> 'Button' then begin exit; end; finally FreeMem(pBuffer,dwSize); end; dwSize := SendMessage(AhWindow,WM_GETTEXTLENGTH,0,0)+1; if dwSize = 0 then begin exit; end; pBuffer := AllocMem(dwSize); try SendMessage(AhWindow,WM_GETTEXT,dwSize,lparam(pBuffer)); if trim(pBuffer) = '"&Verlauf" leeren' then begin SendMessage(AhWindow,BM_CLICK,0,0); Result := false; end; finally FreeMem(pBuffer,dwSize); end; end; var hWindow : DWORD; begin hWindow := FindWindow(nil,'Eigenschaften von Internet'); if hWindow <> 0 then begin EnumChildWindows(hWindow,@EnumChildProc,0); end; end; |
Re: Button finden und betätigen
Moin habe mal euren code benutzt aber bei mir funzt nichts. wie ist es denn bei euch?
Vielleicht kann Daniel ja mal sagen, ob er es geschafft hat? Sven |
Re: Button finden und betätigen
Hab das mal ein bisschen umgeschrieben. Und "Dateien löschen" genommen, damit du sehen kannst, das es funktioniert.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SI: TStartupInfo; PI: TProcessInformation; FindHWnd: HWND; begin FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); if CreateProcess(nil, 'RUNDLL32.EXE shell32.dll,Control_RunDLL inetcpl.cpl,,0', nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForInputIdle(PI.hProcess, INFINITE); FindHWnd := FindWindow(nil, 'Eigenschaften von Internet'); if IsWindow(FindHWnd) then begin FindHWnd := FindWindowEx(FindHWnd, 0, '#32770', 'Allgemein'); if IsWindow(FindHWnd) then begin FindHWnd := FindWindowEx(FindHWnd, 0, 'Button', '&Dateien löschen...'); if IsWindow(FindHWnd) then begin SendMessage(FindHWnd, BM_CLICK, 0, 0); end; end; end; CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; end; |
Re: Button finden und betätigen
Danke für deine Antwort. Ich hätte auch mal gerne mehr Durchblick bei solchen Sachen. Was sollte ich mir denn mal ansehen oder durchlesen? Diese ganzen Befehle sind mir ein rätsel.
Danke. |
Re: Button finden und betätigen
habe das gerade mal getestet aber wenn ich das auf verlauf leeren ändere, will es nicht funzen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SI: TStartupInfo; PI: TProcessInformation; FindHWnd: HWND; begin FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); if CreateProcess(nil, 'RUNDLL32.EXE shell32.dll,Control_RunDLL inetcpl.cpl,,0', nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForInputIdle(PI.hProcess, INFINITE); FindHWnd := FindWindow(nil, 'Eigenschaften von Internet'); if IsWindow(FindHWnd) then begin FindHWnd := FindWindowEx(FindHWnd, 0, '#32770', 'Allgemein'); if IsWindow(FindHWnd) then begin FindHWnd := FindWindowEx(FindHWnd, 0, 'Button', '&"Verlauf" leeren'); if IsWindow(FindHWnd) then begin SendMessage(FindHWnd, BM_CLICK, 0, 0); end; end; end; CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz