[Batch/VBS] Programm schließen wenn anderer PC startet

Mad MAX85

Cadet 4th Year
Dabei seit
Nov. 2004
Beiträge
73
Hallo!

Ich habe da ein kleines Problem... Ich möchte das mein PC ein Programm schließt wenn der PC meines Vaters, oder der meines nachbarn, startet. Wenn die PCs aus sind soll er das Programm wieder starten.
Da mir die Nötige Erfahrung zum Programmieren eines solchen Scriptes fehlt frage ich euch.
Sollte doch als Batch Datei oder VB script laufen können oder?
Hättet ihr nen Quellcode für mich?

MfG
Mad MAX85

EDIT: Die PCs befinden sich logischwerweise in einem Netzwerk. :)
 

Toaster

Lt. Commander
Dabei seit
Apr. 2001
Beiträge
1.266
Re: [Batch/VB] Programm schließen wenn anderer PC startet

so einfach nicht zu lösen, du müsstest wenn einen Server schreiben und 2 Clients benutzen, die sich dann automatishc beim Server anmelden.
 

Ste_Ett

Lt. Junior Grade
Dabei seit
Mai 2004
Beiträge
410
Re: [Batch/VB] Programm schließen wenn anderer PC startet

Ein einfacher Ping tut`s auch. :)

"Antwort auf Ping kann man deaktivieren" -> Clients kann man beenden/nicht starten lassen

Realisieren kannst du das mit jeder Sprache, die entweder Sockets oder COM-Objekte nutzen kann.
 

Toaster

Lt. Commander
Dabei seit
Apr. 2001
Beiträge
1.266
Re: [Batch/VB] Programm schließen wenn anderer PC startet

den passenden Port zu und schon war es das mit deinem Ping und wenn er DHCP nutzt kann er immer das komplette Range pingen um zu sehen ob ein Client da ist?
 

Mad MAX85

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Nov. 2004
Beiträge
73
Re: [Batch/VB] Programm schließen wenn anderer PC startet

Danke erstmal für die antworten... aber...
So aufwendig wollte ich das ganze eigentlich nicht gestalten... :)
An das mit dem Ping habe ich auch schon gedacht... Ping auf die IP, wenn antwort, dann programm schließen, wenn keine antwort gucken ob Programm läuft, wenn nicht, dann programm starten...

Aber weiß nicht wie ich das Als Batch programm oder ähnliches schreibe... :(

P.s. Das Programm ist dazu gedacht das wenn ich nicht da bin er das Programm trotzdem nur dann startet wenn es benötigt wird...
 
Zuletzt bearbeitet:

Mad MAX85

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Nov. 2004
Beiträge
73
Hat keiner mehr eine idee??? :(
 

Swordmaster

Lieutenant
Dabei seit
Apr. 2004
Beiträge
844
Soooo, hat zwar ne Weile gedauert, aber jede Menge Spass gemacht. :p
Ich hoffe es funktioniert so, wie du es wolltest.

Den Code einfach in eine Textdatei kopieren, die Dateiendung ändern und schon sollte es funktionieren. :)


//edit: Habe noch eingefügt, dass nach dem Verbindungstest der Bildschirm wieder geleert wird, da wohl am Ende eines Tages der Arbeitspeicher komplett zugemüllt gewesen wäre :freak:
Code:
@echo off
:: Autor: Swordmaster@Forumbase.de
:: Datum: 21.03.2005

::Hier werden die Einstellungen erledigt
::
SET prozesspfad=c:\programme\winamp\winamp.exe
SET prozessname=winamp.exe
::
::Zeit die zwischen den Verbindungstest gewartet werden soll 
SET waittime=6000
::IP des Ziel PCs
SET zielpc=192.168.88.54
::Eine ungueltige IP im gleichen IP Range (-> wird fuer die Pause benoetigt!)
SET ungueltigeIP=192.168.88.4


::
::Ab hier muss normalerweise nichts mehr geändert werden
::

	
:Verbindungstest
echo.
echo Verbindungstest...
ping -n 1 %zielpc% > NULL
goto %errorlevel%

:0
:: Verbindung OK
echo - PC online!
echo - %prozessname% wird beendet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%"
IF NOT errorlevel 1 taskkill.exe /F /IM %prozessname% 
goto :Loop

:1
::Keine Verbindung
echo - PC offline!
echo - %prozessname% wird gestartet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" > NULL
IF NOT errorlevel 1 goto Loop
echo - %prozessname% wird gestartet
start %prozesspfad%

:Loop
:: Warteschleife
:: "1.1.1.1" durch eine im Netzwerk nicht vorhandene IP ersetzen
:: "30000" durch Zeit in ms ersetzen (30000 sind 30 sec)
PING %ungueltigeIP% -n 1 -w %waittime% > NULL
cls
goto Verbindungstest
 
Zuletzt bearbeitet:

Mad MAX85

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Nov. 2004
Beiträge
73
Boah! Riesen dank!!! Ich werds wenn ich Feierabend habe gleich testen!
Danke danke danke danke danke!!!!
 

-eraz-

Commodore
Dabei seit
Juni 2004
Beiträge
4.270
Hab die Batch mal bei mir getestet, musste sie noch etwas Anpassen damit ich sie zum laufen bekommen habe:

Code:
@echo off
SET prozessname=OUTLOOK.EXE
SET prozesspfad="C:\Programme\Microsoft Office\Office\outlook.exe"
SET waittime=6000

	
:Verbindungstest
echo.
echo Verbindungstest...
ping -n 1 10.0.0.126 > NULL
goto %errorlevel%

:0
:: Verbindung OK
echo - PC online!
echo - %prozessname% wird beendet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" 
[COLOR=Red]IF errorlevel 1 goto :Loop[/COLOR]
taskkill /F /IM outlook.exe 
goto :Loop

:1
::Keine Verbindung
echo - PC offline!
echo - %prozessname% wird gestartet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" > NULL
IF NOT errorlevel 1 goto Loop
echo - %prozessname% wird gestartet
[COLOR=Red]%prozesspfad%[/COLOR]

:Loop
:: Warteschleife
:: "1.1.1.1" durch eine im Netzwerk nicht vorhandene IP ersetzen
:: "30000" durch Zeit in ms ersetzen (30000 sind 30 sec)
PING 10.0.0.170 -n 1 -w %waittime% > NULL
cls
goto Verbindungstest
Den ganzen Variablenwahnsinn hab ich entfernt :D da kennt sich ja keiner mehr aus. Sonst finde ich das ein sehr Kreative Idee :). Aber ein grosses Problem ist mir noch aufgefallen, Mad Max85 möchte das ganze mit zwei PC's machen
Zitat von mad max85:
Ich möchte das mein PC ein Programm schließt wenn der PC meines Vaters, oder der meines nachbarn, startet.
Das ganze funktioniert aber jetzt nur mit einem PC, zwei Batches paralell laufen zu lassen macht auch keinen Sinn...

... 45 Minuten Später ...

So hab mich jetzt mal selbst daran gemacht die Batch umzuschreiben damit zwei PC's getestet werden. Aber es will noch nicht so ganz funktionieren:

Code:
@echo off
SET papa=10.0.0.126
set nachbar=10.0.0.128
SET prozessname=OUTLOOK.EXE
SET prozesspfad="C:\Programme\Microsoft Office\Office\outlook.exe"
SET waittime=6000

	
:Verbindungstest
echo.
echo Verbindungstest...
ping -n 1 %papa% > NULL
goto %errorlevel%

:0
:: Verbindung OK
echo - Papa ist online!
echo - %prozessname% wird beendet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" 
IF errorlevel 1 goto :Loop
taskkill /F /IM outlook.exe 
goto :Loop

:1
::Keine Verbindung
echo - Papa ist offline, Verbindung zu Nachbarn wird getestet...
ping -n 1 %nachbarn% >NULL Find | "TTL" > NULL
IF errorlevel 1 goto :Nonline
echo - Nachbar ist ebenfalls offline.
echo - %prozessname% wird gestartet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" > NULL
IF NOT errorlevel 1 goto :Loop
echo - %prozessname% wird gestartet
%prozesspfad%
goto :loop

:Nonline
echo - Nachbar ist Online Programm wird nicht gestartet.
goto loop

:Loop
:: Warteschleife
:: "1.1.1.1" durch eine im Netzwerk nicht vorhandene IP ersetzen
:: "30000" durch Zeit in ms ersetzen (30000 sind 30 sec)
PING 10.0.0.170 -n 1 -w %waittime% > NULL
cls
goto Verbindungstest
Find "TTL" hab ich deswegen gemacht weil ping nicht immer den richtigen errorlevel zurückgibt, aber der Find will nicht so recht, an dieser Stelle liegt irgendwo der Fehler.
 

Mad MAX85

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Nov. 2004
Beiträge
73
Das mit dem zweiten PC wäre schön wenn es funktioniert, ist aber nicht sooo tragisch wenns nicht klappt...
aber cool wie das hier abgeht... :)
 

Mad MAX85

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Nov. 2004
Beiträge
73
Hi! Also irgendwas stimmt mit deinem Programm nicht... will heißen, der PC1 is online, das programm geht aber nicht aus... die Batch Programme funzen... THX
 

Swordmaster

Lieutenant
Dabei seit
Apr. 2004
Beiträge
844
Zitat von [-eraz-]:
hä, find TTL hast du doch nie eingesetzt? :confused_alt:
*argh* hast Recht, hatte eine andere Version gepostet, wie ich hier lokal getestet habe. :freaky:
[so ist das eben, wenn man bei Änderungen immer nur die .cmd kopiert und dann 100te versch. Versionen auf dem Desktop liegen hat...]

Die Warteschleife finde ich sehr interessant. Ich wollte es erst mit choice machen, das gibts bei XP aber anscheinend nicht mehr... :rolleyes:

Man muss die Zeile mit dem TestPing an den Zielrechner nur folgendermaßen ändern:
Code:
ping -n 1 %zielpc%  | find "TTL=" > NULL
 
Zuletzt bearbeitet:

-eraz-

Commodore
Dabei seit
Juni 2004
Beiträge
4.270
Zitat von Swordmaster:
[so ist das eben, wenn man bei Änderungen immer nur die .cmd kopiert und dann 100te versch. Versionen auf dem Desktop liegen hat...]
Kenn ich gut :D

Hab den neuen Befehl so mal eingebaut doch wie es scheint gibt ping den errorlevel zurück und nicht find :freak: weiß auch nicht warum. Jedenfalls hab ich bei den Batchfile jetzt noch ein paar Bugs beseitigt, es funktioniert jetzt einwandfrei auch mit zwei Computern... ...ahh Batchen ist einfach Geil :daumen:

Code:
@echo off
SET papa=10.0.0.128
SET nachbar=10.0.0.127
SET prozessname=OUTLOOK.EXE
SET prozesspfad="C:\Programme\Microsoft Office\OFFICE11\outlook.exe"
SET waittime=6000

	
:Verbindungstest
echo.
echo Verbindungstest...
ping -n 1 %papa% > NULL
goto %errorlevel%

:0
:: Verbindung OK
echo - Papa ist online!
echo - %prozessname% wird beendet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" 
IF errorlevel 1 goto :Loop
taskkill /F /IM %prozessname% > NULL
goto :Loop

:1
::Keine Verbindung
echo - Papa ist offline, Verbindung zu Nachbarn wird getestet...
ping -n 1 %nachbar% | Find "TTL=" > NULL
IF NOT errorlevel 1 goto :Nonline
echo - Nachbar ist ebenfalls offline.
echo - %prozessname% wird gestartet, wenn nicht schon erledigt
TASKLIST | find "%prozessname%" > NULL
IF NOT errorlevel 1 goto :Loop
echo - %prozessname% wird gestartet
Start "Outlook" %prozesspfad%
goto loop

:Nonline
echo - Nachbar ist Online Programm wird nicht gestartet bzw. Beendet!
TASKLIST | find "%prozessname%" 
IF errorlevel 1 goto :Loop
taskkill /F /IM %prozessname% > NULL

:Loop
:: Warteschleife
:: "1.1.1.1" durch eine im Netzwerk nicht vorhandene IP ersetzen
:: "30000" durch Zeit in ms ersetzen (30000 sind 30 sec)
PING 10.0.0.170 -n 1 -w %waittime% > NULL
cls
goto Verbindungstest
 
Top