Hi,
ich habe das Problem, das ich ein Internet-Explorer Fenster was ich durch die WinApi geöffnet habe nicht wieder automatisiert geschlossen bekommen.
Ich habe hier mal einen Teilcode aus dem Projekt gepostet und etwas modifiziert, damit der Rest nicht vom eigentlichen Problem ablenkt. Es geht aber nur um den Befehl das offene Fenster wieder zu schließen.
Der grundsätzliche Ablauf soll sein :
- Die WINApi öffnet ein IExplorer-Fenster einer Website
- Nach 30 Sekunden Wartezeit schließt dieses Fenster
- Die WINAPI öffnet ein neues Fenster
- ... und dies 5x (im realen Projekt mehrere 100 mal)
Klappt alles, außer daß das Fenster nicht zu geht, so dass ich nachher 5 offene Fenster habe. Könnte man natürlich manuell schließen, aber im realen Projekt geht es um mehrere 100 Fenster die nacheinander nach einer gewissen Verzögerung abgearbeitet werden müssen.
Schließen die Fenster aber nicht und bleiben offen, ist Chaos vorprogrammiert. Weiss nicht was passiert wenn Windows 500 Inztanzen des IE-Explorer verwalten soll.
Destroywindow und das testweise verwendete Closewindow zeigen also keine Wirkung.
Wie bekomme ich also das per API geöffnete Fenster wieder zu ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| For i:= 1 to 5
Do begin Wnd := HWND_TOP; Operation := 'open'+#0; Filename := 'iexplore.EXE'+#0; Parameters := 'www.demowebsite.de'; Directory := 'C:\Programme\Internet Explorer'+#0; ShowCmd := SW_ShowNormal;
APIResponse := ShellExecute(Wnd,Operation,Filename,Parameters,Directory,ShowCmd);
timestamp := now; DecodeTime(timestamp,vh,vmin,vsec,vmsec); Datasec := (vh*360)+(vmin*60)+(vsec);
repeat timestamp := now; DecodeTime(timestamp,vh,vmin,vsec,vmsec); immosec := (vh*360)+(vmin*60)+(vsec) until immosec-datasec > 30 ;
wnd := HWND_TOP; Flag := destroywindow(WND);
end; |
Grüße Kobayashi
Moderiert von
Narses: Delphi-Tags hinzugefügt