WinFuture-Forum.de: Script Hält Fenster Auf - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Script Hält Fenster Auf cmd-script


#1 Mitglied ist offline   2cool 

geschrieben 23. Mai 2006 - 11:23

Hi,

ich hoffe das mir hier vielleicht der eine oder andere noch ein paar Tipps zu Shellscripten für die cmd.exe auf Windows geben kann. Ich beschäftige mich seit kurzer Zeit damit. Zuerst war ich abgeschreckt von den wirklich perversen Syntax, zumindest im Vergleich zu "richtigen" Programmiersprachen. Aber ich habe nicht aufgegeben und so sind ein paar Scripte entstanden.


Eines davon möchte ich hier mal zur Diskussion stellen. Wenn Ihr Lust habt, könnt Ihr es einfach ausprobieren, Kritik und Verbesserungsvorschläge, insbesondere zu Semantik und Syntax, sind erwünscht. Darauf, wie das Script im einzelnen funktioniert, will ich nicht eingehen, wäre wohl zu langweilig, aber das Script macht folgendes:



Wenn es gestartet wird, egal von wo und wie, erzeugt es zwei Fenster, die sich gegenseitig überwachen. Sobald das eine Fenster geschlossen wird, egal welches, wird es von dem anderen in kurzer Zeit (ca 0,5 sec) wieder geöffnet. Es bleiben aber immer nur zwei Fenster, sonst wäre es ja billig. Man kann das ganze also als Geschicklichkeitsspiel betrachten, bei dem es darauf ankommt, beide Fenster kurz hintereinander zu schliessen.

Für den Fall, dass es jemand den Trick nicht herausfinden sollte und die Fenster nicht geschlossen bekommt, braucht er nur auf die Hifedatei zu klicken, die das Script nach dem Start als erstes anlegt. Diese Hilfedatei schliesst die beiden widerspenstigen Fenster und entsorgt auch gleich die temporären Dateien, die von dem Script angelegt wurden.





@echo off
title survivor
if not "%1"=="new" call :helpfile
::
:: survivor by 2cool, to stop use help.cmd
::
set processname=234.exe
set startcommand=/min %temp%\234.exe /c %temp%\234.cmd new
if "%~nx0"=="234.cmd" (
set processname=123.exe
set startcommand=/min %temp%\123.exe /c %temp%\123.cmd new
)
if not exist "%temp%\123.cmd" (
type %0 > %temp%\123.cmd
type %systemroot%\system32\cmd.exe > %temp%\123.exe
start /min cmd /c "start /min %temp%\123.exe /c %temp%\123.cmd new"
goto :eof
)
if not exist "%temp%\234.cmd" (
type %0 > %temp%\234.cmd
type %systemroot%\system32\cmd.exe > %temp%\234.exe
start /min cmd /c "start /min %temp%\234.exe /c %temp%\234.cmd new"
goto :eof
)
echo.try to close me
:checking
ping -n 1 127.0.0.1 > nul
tasklist | findstr /i "%processname%" > nul
if errorlevel 1 start /min cmd /c "start %startcommand%"
goto checking
::
:: make a helpfile to stop the show
::
:helpfile
echo :: run this file to stop>"%~dp0help.cmd"
echo @echo off>>"%~dp0help.cmd"
echo echo.stopping the show and deleting my tempfiles>>"%~dp0help.cmd"
echo start /min cmd /c "del /f /q %temp%\123.cmd">>"%~dp0help.cmd"
echo start /min cmd /c "del /f /q %temp%\234.cmd">>"%~dp0help.cmd"
echo start /min cmd /c "taskkill /im 123.exe /f">>"%~dp0help.cmd"
echo start /min cmd /c "taskkill /im 234.exe /f">>"%~dp0help.cmd"
echo start /min /wait cmd /c "ping -n 3 127.0.0.1>nul">>"%~dp0help.cmd"
echo start /min cmd /c "ping -n 2 127.0.0.1>nul && taskkill /im cmd.exe /f">>"%~dp0help.cmd"
echo start /min cmd /c "del /f /q %temp%\123.exe">>"%~dp0help.cmd"
echo start /min cmd /c "del /f /q %temp%\234.exe">>"%~dp0help.cmd"
echo start /min cmd /c del /f /q "%~dp0help.cmd">>"%~dp0help.cmd"
goto :eof



greetz
:blink:

Dieser Beitrag wurde von 2cool bearbeitet: 23. Mai 2006 - 12:21

greetz, 2cool

web: cmd-script
mail: [email protected]
0

Anzeige



#2 Mitglied ist offline   2cool 

geschrieben 24. Mai 2006 - 22:25

.
Einen hab' ich noch:


Bei dem Script von oben waren tatsächlich noch Redundanzen zu entfernen:

@echo off
title joke
set namex=234
set pathx=%temp%
if "%~nx0"=="%namex%.cmd" set namex=123
if not exist "%pathx%\%namex%.cmd" (
:runclone
type %0 > %pathx%\%namex%.cmd
if not exist "%pathx%\%namex%.exe" type %comspec% > %pathx%\%namex%.exe
start /min cmd /c "start /min %pathx%\%namex%.exe /c %pathx%\%namex%.cmd new"
if not "%1"=="new" goto :eof
)
:checking
tasklist | findstr /i "%namex%.exe" > nul
if errorlevel 1 goto :runclone
goto checking



Das Helpfile von der ersten Version funktioniert hier auch, daher habe ich es weggelassen.




Wäre eigentlich ein netter Scherz für den Kollegen am 1. April,
das kleine Script im Autostart und der Tag fängt gut an:

Wieso bekomme ich diese beiden dummen Fenster nicht geschlossen? ;)



Es ist aber zu schaffen, wenn man schnelle Mausfinger hat.....
.
greetz, 2cool

web: cmd-script
mail: [email protected]
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0