Überprüfen ob Prozess bereits läuft.



  • Hallo zusammen,
    ich hab von meinem Chef die Aufgabe bekommen ein Programm zu schreiben, dass eine Internet Seite öffnet und das Formluar welches sich dor befindet aufüllt.
    Das klappt soweit auch ganz gut.

    Nur habe ich folgendes Problem.
    Wenn mein Firefox länger zum starten braucht, läuft mein Programm bereits weiter und das Formular wird falsch oder garnicht ausgefüllt.

    Nun wäre ja die Lösung dafür das ich mein Programm wissen lasse wann Firefox fertig geladen ist. Noch besser wäre es wenn mein Programm erkennen würde wann die Homepage auch noch komplett geladen wäre.

    Leider habe ich dazu noch keine passende Lösung gefunden. Da ich noch recht am Anfang der C-Programmierung stehe wäre es sehr nett wenn mir die evtl. Lösungen auch erklärt werden 🙂

    Hoffe es ist soweit verständlich was ich vorhabe.

    Danke schonmal

    Grüße
    bethebe



  • Ich kenne jetzt die Schnittstellen von Firefox nicht aber gibts da vielleicht was das man sich einklinken kann oder so? (Mozilla Seite könnte man vielleicht mal suchen)
    Alternative wäre es sich "manuell" mit dem Server zu verbinden(über sockets) und das Programm den HTML-code parsen lassen (sind ja nur bestimmte Dinge relevant, den Rest kann man ignorieren). Vielleicht gibts ja auch ne entsprechende Bibliothek?



  • Erstmal Danke für die Antwort.

    Das Problem ist das das Formular ein JavaApplet ist. Somit fällt HTML auslesen leider flach. Wie gesagt das Ausfüllen ist auch nicht das Problem sondern eher
    das mein Programm wissen soll wann Firefox/die Homepage geladen ist und erst dann
    mit dem eigentlich Programm fortfahren soll und das Formluar ausfüllt.

    Hab mir natürlich überlegt das ganz einfach mit einem Sleep(20000) oder sowas zu machen. Allerdings weiß ich ja nie wielange die Seite zum laden brauch. Und wenn die Seite sofort lädt sitzt man 20 Sekunden da und wartet bis es weiter geht, ist also auch keine zufriedenstellende Lösung.



  • Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du könntest dir die Prozessorzeiten von Firefox besorgen, erst wenn Kernel- und Usertime dauerhaft niedrig sind, ist der Firefox mit dem Starten und Laden der Seite fertig.
    Ich weiß aber nicht, ob das eine ganz zuverlässige Methode ist, bei Netwerkfehlern ist die Prozessoraktivität auch niedrig, die Seite dennoch nicht geladen. Ein "Hack" wäre natürlich, dann den Fenstertext auszulesen und bis "- Mozilla Firefox" mit dem Seitennamen zu vergleichen.



  • Steuer den Firefox über die WinAPI an und überprüfe, ob in der Statuszeile Fertig steht.

    Aber sauber ist das natürlich auch nicht. Und vorallem ist es plattformabhängig.


  • Mod

    Ist das nicht sowieso etwas merkwürdig, das Ausfüllen eines Webformulars über einen Browser zu machen? Was hindert dich daran, das Formular direkt in deinem Programm "auszufüllen" und die Daten an den Server zu schicken?



  • Du könntest http://seleniumhq.org/ probieren, damit kannst du Firefox sehr einfach skripten. Ob da mit Java-Applets funktioniert, weiß ich aber nicht.



  • Hallo,
    habe mich jetzt mal in WinApi etwas eingelesen, und diese Lösung scheint mir doch recht Sinnvoll.
    Da bisher alles anderen garnicht funktioniert hat.
    Allerdings komme ich nicht drauf wie die Statusmeldung "Fertig" aus Firefox auslesen soll. Hat mir da vielleicht eine Lösung bzw. einen Vorschlag wie man das machen könnte.



  • Wie steuerst du überhaupt Firefox ohne Selenium o.Ä. wenn man fragen darf...



  • Mit

    ShellExecute();
    

    öffne ich die Homepage mit dem Standartbrowser. Ist für mich noch das einfachste und für meine Zwecke eigentlich ausreichend.



  • Nim am Besten ShellExecuteEx . Da bekommst du das Handle auf den Prozess gleich geliefert. Mit Spy++ (bei MSVS mitgeliefert) kommst du an die IDs und Klassennamen aller Fenster.
    Ich würde dennoch regelmäßig (vielleicht alle 500 ms) GetProcessTimes aufrufen und schauen, ob der Browser alles erledigt hat.
    Ach ja, zwischen verschiedenen Prozessen geht nicht GetWindowText , um an den Text eines Controls zu kommen. Hier muss explizit eine Nachricht vom Typ WM_GETTEXT gesendet werden.


Anmelden zum Antworten