Jak przy pomocy aplikacji Delphi spowodować zapisanie strony internetowej przez przeglądarkę (np. Firefoxa), znając aktualny uchwyt przeglądarki oraz uchwyt MenuGłówne/Plik.
Jak masz uchwyt głównego okna przeglądarki to wyślij do niego skrót klawiszowy Ctrl+S
- obstawiam, że popularne przeglądarki mają ten skrót przeznaczony właśnie do zapisywania bieżącej strony; To pierwsza część, bo strona sama się nie zapisze - wyskoczy okienko do wybrania lokalizacji, więc trzeba będzie znaleźć uchwyt dialogu, wkleić w polu tekstowym ścieżkę i wcisnąć guzik Save
(albo znów zasymulować klawisze - w tym przypadku wystarczy Enter
);
(trudniejszą alternatywą byłoby abym z aplikacji wklejał adres zapisu pliku do wywołanego przez przeglądarkę okna FileSaveDialog ponieważ jego uchwyt jest inny przy każdym zapisie strony www.)
EnumChildWindows;
Zresztą każde systemowe okno dialogowe zapisu/otwarcia, domyślnie ma sfokusowane pole edycyjne z docelową/źródłową nazwą pliku; Dodatkowo, cały ciąg nazwy jest domyślnie zaznaczony; Również każde systemowe okno dialogowe obsługuje specjalne klawisze (Enter
do potwierdzenia, Esc
do anulowania itd.), które możesz perfidnie wykorzystać;
Podsumowując, dochodzimy do poniższego algorytmu:
- skopiowanie ciągu ścieżki docelowej do systemowego schowka,
- wysłanie skrótu
Ctrl+S
do okna przeglądarki w celu otwarcia okna dialogowego,
-
Sleep, aby mieć pewność, że okienko zdążyło się otworzyć,
- wysłanie skrótu
Ctrl+V
w celu wklejenia ścieżki ze schowka do pola edycyjnego,
-
Sleep, aby mieć pewność, że okienko przetrawiło wklejanie tekstu,
- wysłanie klawisza
Enter
w celu potwierdzenia danych w okienku i zapisania strony;
To co podałem wyżej nie wymaga znajomości uchwytów do okna dialogowego i jego kontrolek - jest to najprostsze rozwiązanie; Jednak wymaga sprawdzenia, dlatego że nie jestem pewny co do skrótu Ctrl+S
i co się stanie, jeśli przeglądarka nie jest aktywna i wyświetli okno dialogowe (czy to okno zostanie aktywowane, aby łapać komunikaty klawiatury).