Per Batch eine Programm-INSTANZ! aufrufen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der Benutzer wird jedoch nicht auf der Suchseite bleiben oder gar ein neues Fenster öffnen welches dann die bereits beobachtete Position übernimmt.

Dann entzieht sich die zu beobachtende Instanz wieder der Überwachung....

Alternative habe ich mich mal umgeschaut wo der Fox Fehler und geöffnete Webseiten etc loggt.

https://developer.mozilla.org/de/docs/Mozilla/Debugging/HTTP_logging

vielleicht bringt dich das auf eine Idee...
immerhin bietet about:networking#logging die Möglichkeit einiges an Überwachung in eine selbst definierte Protokolldatei zu loggen.

Aber im Ernst?, soviel Aufwand nur um zu erfahren wann ein Kollege Feierabend macht?

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

FresherKnilch 
Fragesteller
 05.11.2018, 19:59

Kein Kollege, Familie. Und die "Überwachung" dient der Stundenabrechnung gegenüber dem Arbeitgeber, der das Erreichen der Mindeststundenanzahl nicht für den jeweiligen Mitarbeiter öffentlich macht, so das dieser gezwungen ist, selbst "Buch zu führen". Verpennt dieser das (was immer wieder passiert) kann er nicht sicher sein und arbeitet regelmäßig "zur Sicherheit" einige Stunden umsonst.

Vielen vielen Dank für den Hinweis auf die Browserlogs. Schaue mir das bei Gelegenheit an.

Zu meinem letzten Ansatz. Hab inzwischen festgestellt, dass die OpenTab-Geschichte nur funktioniert, so lange das Fenster das aktive ist -_-

Also so viel zur Funktionssicherheit.

0

Mit

start /W programm.exe

wird mit der weiteren Ausführung der Batch-Datei gewartet bis der erzeugte Prozess beendet ist. Das sollte zwar auch bei mehreren Fenstern funktionieren, sorgt aber für ein dauerhaft offenes CMD-Fenster, was sicher nicht gerade hübsch ist.

Mit

tasklist | find /i "browser.exe"

kannst du feststellen ob überhaupt eine Instanz läuft (falls du das irgendwie brauchen solltest)

Mit

tasklist /V /FI "imagename eq browser.exe"

kommst du an die ProcessID heran (könntest du dir direkt nach dem starten holen wenn es noch kein zweites Fenster gibt und du start /W nicht benutzen willst).

Mit

tasklist /V /FI "STATUS eq RUNNING"

kommst du an die laufenden Prozesse ran. Hast du dir die PID vorher geholt kannst du schauen ob der Prozess noch läuft.

Ich persönlich würde mich aber nicht mit Batch-Dateien abmühen um eine Zeiterfassung zu realisieren. Die Windows Aufgabenplanung ist da wesentlich mächtiger und bietet zahllose verschiedene Trigger die die Protokollierung auslösen können. Damit könntest du was genaueres realisieren als dich auf eine bestimmte Browser-Instanz zu stützen. Und das ganze läuft still im Hintergrund ab.


FresherKnilch 
Fragesteller
 05.11.2018, 10:36

Mh danke erstmal. Es wird wohl darauf hinaus laufen, vorher laufende Instanzen zu identifizieren und die, die nachträglich gestartet wurde herauszufiltern. Mal schauen was mir dazu einfällt.

Ja, der Taskplaner war auch meine erste Idee, allerdings fällt mir nicht ein, wie ich dort den Aufruf einer Website (und deren Verlassen) triggern könnte.

Hast du eine Idee?

0
Erzesel  05.11.2018, 11:37

ch habe ja heute Vormittag einiges Experimentiert und mich auch mal über die so hoch gepriesene Aufgabenplanung gebeugt...

Dieser geht es auch nicht besser als meiner Batch.
Browser sind eine kleine Welt für sich, wenn man nicht gerade auf interne Logs und Abläufe (mehr oder weniger durch die Hintertür) Zugriff nimmt, hat man keine Chance. Ich höre schon den Virenscanner anschlagen...;)

Der Browser selbst hat keine Möglichkeit Ereignisse dem System mitzuteilen. (Nicht mal das Öffnen und Schließen von eigenen Instanzen )

Im Prinzip erfährt das System nur das Der Browser mehr Ressourcen anfordert oder den Fensternamen ändert. Das war es dann auch.

Ergo gibt es auch nichts was bei der Aufgabenplanung irgendwasTriggern könnte.

2

Ich sage nur selten "Geht nicht" , aber ich bezweifle ob es überhaupt eine Möglichkeit für Dein Vorhaben gibt.

...Ich dachte mir auch: Trivial, einfach per WMIC starten

wmic.exe process call create "myProgram "

und die zurückgegebene PID beobachten...

Pustekuchen!!!

Das funktioniert prima solange noch keine andere Instanz läuft...

...aaaaaber! , wenn bereits ein Fenster offen ist , wird die neue Instanz der alten zugeordnet und bekommt eine neue PID , welche sich der der Überwachung entzieht.
Das dauert einige Momente die ausreichen um wenigstens unmittelbar nach dem Start kurz in der Taskliste zu erscheinen.
Sekunden Später ist sie weg....

Demo:

@echo off
  rem hier auf  Wunsch einen anderen Browser eintragen:
set "myBrowser=C:\Program Files\Internet Explorer\iexplore.exe"
  
  rem sicherstellen das vor dem Experiment bereits eine Insanz des Browser läuft
"%myBrowser%" 


  rem neue Instanz starten und PID ermitteln 
for /f "usebackq  tokens=2 delims==;" %%p in  (`wmic.exe  process call create "%myBrowser% " ^|find /i "ProcessId"`) do (
    set "myPID=%%p"
)


echo Das neue Fenster  hat die PID: %myWindowPID%
  
  rem  PID beobachten  (alle 5 sekunden nachschauen ob sie  noch  da ist)
echo Test sofort nach Start:
:watchPID
    tasklist /fi "pid eq %myPID%" /fo csv |find "iexplore.exe" || (
        echo PID verschwunden
        pause
        exit /b
    )
    timeout 5
goto :watchPID


pause
exit /b

so geht es also nicht.

Meine nächste Idee war einfach die PIDs bestehender Browserfenster zu ermitteln und über das Ausschlussverfahren die PID des neuen Fensters zu ermitteln , geht auch nicht...
Die neue Instanz bekommt die PID der bereits existierenden .
Das schließen einer zuvor gestarteten Instanz wird nicht wahrgenommen.

@echo off
start "" "C:\Program Files\Internet Explorer\iexplore.exe" https://www.google.de/
timeout 3
for /f " tokens=2,9* delims=," %%a in ('tasklist /nh /v /fo csv /fi "ImageName eq iexplore.exe" ') do ( echo blub %%~a %%b )
start "" "C:\Program Files\Internet Explorer\iexplore.exe" https://www.gutefrage.net/
timeout 3
for /f " tokens=2,9* delims=," %%a in ('tasklist /nh /v /fo csv /fi "ImageName eq iexplore.exe" ') do ( echo blub %%~a %%b )
timeout 3
echo schliesse jetzt das Googlefenster und  weiter mit beliebiger Taste
pause >nul
timeout 3
for /f " tokens=2,9* delims=," %%a in ('tasklist /nh /v /fo csv /fi "ImageName eq iexplore.exe" ') do ( echo blub %%~a %%b )
 echo ende...
pause

Das ist das Ergebnis für den StandardBrowser, andere Browser könnten durchaus mit ganz anderen Ergebnissen aufwarten.
Ich denke jedoch dies zu erforschen, käme der Suche nach Atlantis gleich .

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

FresherKnilch 
Fragesteller
 05.11.2018, 11:48

Ja, einen ähnlichen Weg habe ich auch gerade versucht. Habe alle bestehenden Tasks in eine Liste geschrieben und wollte anschliessend die neuhinzukommende identifizieren und überwachen.

Leider gleiches Problem, wie von dir beschrieben, aber mit Firefox und Chrome.

Mist....danke auf jeden Fall, hast dir echt viel Arbeit gemacht.

1
FresherKnilch 
Fragesteller
 05.11.2018, 13:09

Habs hinbekommen. Sogar erstaunlich einfach. Wie ausfallsicher das allerdings ist, muss sich noch beweisen.

Wenn ich zb. den Firefox mit URL starte, bekommt das Fenster den "Namen der Website + Firefox.exe" in der Tasklist zugewiesen.

So kann sogar ein Untertab in einem einzelnen Firefoxfenster überwacht werden.

Überprüft wird also nur, ob bei der Suche nach "windowtitle eq Google*" eine Ausgabe erfolgt (Prozess:Firefox.exe)

Das setzt natürlich voraus, dass der Websitebetreiber den Titel der Seite nicht laufend ändert.

1