Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Musik Subprozess (Batch)

Mitglied: clragon

clragon (Level 1) - Jetzt verbinden

21.10.2016 um 09:47 Uhr, 867 Aufrufe, 28 Kommentare

Hey Leuts.

Ich hab mir natürlich wieder ein exquisites Problem für mich selbst herausgesucht an dem ich jetzt feststecke ...

Also ich hab 2 wichtige Dinge. Erstens ich hätt gern Musik im Hintergrund meiner Batch.
Das funkt recht gut, mit diesem Script hier:

01.
@echo off
02.
set "file=Sound.mp3"
03.
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
04.
  echo Sound.URL = "%file%"
05.
  echo Sound.Controls.play
06.
  echo do while Sound.currentmedia.duration = 0
07.
  echo wscript.sleep 100
08.
  echo loop
09.
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs
10.
timeout /t 2 /nobreak >nul
11.
:loop
12.
start "" /wait /min sound.vbs 
13.
goto :loop
Erstes Problem: Ich weiss nicht wie ich diesen Erschaffenen Prozess töten kann somit läuft die Musik für immer, und ebenfalls habe ich ihn sogar nicht einmal im Taskmanager gefunden, was aber sowieso nicht wichtig ist, da ich ihn gern mit der einer anderen Batch beenden möchte, sobald ein bestimmtes Event eintritt. Und ich möchte auch nicht einfach den Loop beenden und dann warten bis die Musik aufhöhrt, da der Wechsel auf einen Schlag passieren soll.

Zweites Problem: (Nicht so wichtig) Ich habe eine Settings.bat welche einen SFX und Musik Regler hat. Nun, diese sind noch nicht besonders Nützlich, jedoch würde ich diese gern benutzen.
Das heisst soweit das ich wahrscheinlich für jeden SFX sound eine Batch wie oben habe welche dann mit einem Parameter einen SFX startet, aber ich habe keine Kontrolle über das Volumen. wüsste jemand wie ich für den erschaffenen Prozess ( oben ) das Volumen einstellen kann, und zwar nur für diesen da ich das Hauptvolume nicht berühren möchte? ( dies kann man ja auch in den normalen Windows Volumen Einstellungen )

Das alles sind natürlich Vorbereitungen für eine Art Videospiel womit ich grade am Rumprobieren bin, da ich keine Hobbies habe und die ganze Zeit am Batch schreiben bin ;)




TL;DR
Ich versuche ein Batch Game zu schreiben welches einen Musik und SFX controller und den Settings sowie Hintergrund Musik und Soundeffeckte im Spiel haben.
Die Settings existieren bereits jedoch ohne Kontrolle über das Volumen.
28 Antworten
Mitglied: H41mSh1C0R
21.10.2016 um 10:18 Uhr
hi,

was macht denn deine sound.vbs?

Irgend ein Process sollte schon generiert werden.
Ggf. eine Windows Media Player Instanz?

PID ermitteln und mit Taskkill abschiessen.

Gruß
Bitte warten ..
Mitglied: clragon
21.10.2016 um 10:29 Uhr
Danke, aber das bringt micht nicht sehr viel weiter.
Das mit taskkill wusste ich schon vorher.
Nur wie ermittle ich die PID eines Prozesses automatisch, Da dies ja vom Script und nicht dem User gemacht werden soll?
Bitte warten ..
Mitglied: H41mSh1C0R
21.10.2016 um 10:32 Uhr
öööhhhmmm "Tasklist" ?????
Bitte warten ..
Mitglied: 131223
21.10.2016, aktualisiert um 10:39 Uhr
VBS laufen im Prozess cscript.exe oder wscript.exe einfach bei taskkill den imagename angeben oder mit tasklist filtern, fertig.

BTW. wer macht sowas heutzutage noch mit Batch?? Kopfschüttel. Wenn du kein Hobby hast hast du ja eigentlich genug Zeit zum Lernen einer richtigen Programmiersprache.
Batch is wat fö ming Omma.
Bitte warten ..
Mitglied: clragon
21.10.2016 um 10:55 Uhr
Eher nicht, wenn du genauer lesen würdest. Tasklist zeigt eine Liste mit PIDs und Namen der Prozesse die am laufen sind.
Da dies ja vom Script und nicht dem User gemacht werden soll?
Daher ist Tasklist keine Lösung. Naja ich habs selber rausgefunden, mit Findstr könnte man die PID von wscript.exe herausfinden oder direkt töten, was aber auch alle anderen vbsscripts beenden würde. Vielleicht brauche ich jetzt eine Umfangreiche Abgleich Engine...
trotzdem danke das du es versucht hast.

Meine frage hat übrigens noch eine zweiten Teil.
Bitte warten ..
Mitglied: 131223
21.10.2016, aktualisiert um 11:10 Uhr
Laustärke in eine Datei schreiben und im VBS im Loop die Datei regelmäßig auslesen (FileSystemObject) und an den Player übergeben.

Daher ist Tasklist keine Lösung.
Doch
https://www.administrator.de/forum/taskkill-bestimmtes-cmd-fenster-31594 ...
Natürlich per FOR-Schleife, die Kenntnisse setze ich hier bei einem Batchie voraus.
Bitte warten ..
Mitglied: LotPings
22.10.2016 um 15:12 Uhr
Hallo clragon,
das [w|c]script zu killen macht keinen Sinn solange die Batchdatei noch läuft und das Script immer wieder mit neuer Pid startet.
Je nach Dauer der gewählten mp3 Datei wäre das dann Schritt 2.
Um die Batchdatei einfacher zu identifizieren würde ich ihr per Title einen aussagefähigen Namen verpassen und den per Tasklist /V filtern.

Da die Batchdatei aber ja immer noch ein sichtbares Fenster hat, wäre ein kleines Timeout /T 1 ohne /Nobreak vor dem goto :loop ja eine viel einfachere Lösung.

Gruß
LotPings
Bitte warten ..
Mitglied: Friemler
22.10.2016 um 18:26 Uhr
Hallo clragon,

die Zeile
Sound.Controls.play
legt doch nahe, dass das Media Player Scripting-Objekt eine Property Controls hat, über die die Steuerelemente des WMP (z.B. Play, Stop, usw.) zugänglich sind. Wozu dann Tasks abschießen?

Guckst Du hier.

Grüße
Friemler
Bitte warten ..
Mitglied: clragon
22.10.2016 um 21:14 Uhr
Danke! das ist mir eben gerade auch aufgellen...
jetzt hab ich das hier
01.
Set Sound = CreateObject("WMPlayer.OCX.7")
02.
Sound.URL = "Distrust.mp3"
03.
nada = 1
04.
do while nada = 1
05.
wscript.sleep 100
06.
Sound.Controls.play
07.
wscript.sleep (int(Sound.currentmedia.duration)+1)*1000
08.
loop
09.
Sound.Controls.stop
wscript.sleep (int(Sound.currentmedia.duration)+1)*1000
Diese Zeile versteh ich noch nicht ganz, und ich müsste jetzt wissen wie ich nada von aussen aus auf 0 setzte, damit es stop. Das wäre perfekt.
ach ja. ich kann das aber sowieso alles wieder wegwerfen da ist keine Unterbrechungsfreie Wiedergabe ist.
Bitte warten ..
Mitglied: rubberman
LÖSUNG 22.10.2016 um 22:10 Uhr
Hallo clragon.

Diese Zeile versteh ich noch nicht ganz
Das duration-Member enthält die Länge deines mp3 Tracks in Sekunden mit Nachkommastellen. Sleep verlangt Millisekunden, darum wird 1 addiert, dann mit 1000 multipliziert und abgerundet.
und ich müsste jetzt wissen wie ich nada von aussen aus auf 0 setzte
In eine Datei schreiben und diese auslesen.

[OT]
Das alles sind natürlich Vorbereitungen für eine Art Videospiel womit ich grade am Rumprobieren bin
Wie du siehst, kannst du bereits das Audio nicht mit Batch regeln. Was glaubst du, passiert mit der Anzeige? Das Konsolefenster ist textbasiert. Grafik ist nicht, Vorder- oder Hintergrund ist nicht, den Cursor ohne 3rd Party irgendwo hinsetzen ist nicht, unterschiedliche Farben innerhalb eines Fensters ist ein Krampf, über Performance muss man sich keine Gedanken machen da sie nicht existiert.
Spiel mit Batch ist so etwas wie Sahnetorte mit Ketchup. Braucht keiner.
[/OT]

Grüße
rubberman
Bitte warten ..
Mitglied: clragon
22.10.2016 um 22:49 Uhr
Ja ich weiss. Deswegen sollte das auch mehr Story und Text und Entscheidung beinhalten als tatsächliches rumlaufen mit einem charakter oder einer GUI. Jedoch habe ich heute einen super umständlichen und langen Weg gefunden wie man tatsächlich eine Map erstellen könnte welche sogar Farben beinhaltet, und einen beweglichen Charakter sowie Reaktionen auf Felder.
Also ehrlich gesagt ist nur ne Idee bis jetzt. Und selbst wenn ich das Projekt in den Müll werfe, eine farbige funktionstüchtige Map baue ich vorher noch.
Bitte warten ..
Mitglied: rubberman
LÖSUNG 23.10.2016, aktualisiert um 14:49 Uhr
Hallo clragon.

OK, ich hab mal kurz ein Hybrid aus Batch und JScript zusammengeschraubt. (Das ist auch nichts anderes als Batch und VBScrip, nur dass beide Codes in derselben Datei liegen.)

01.
@if (@a)==(@b) @end      /*********** Batch part ***********
02.

03.
@echo off &setlocal
04.
set "settingfile=settings.txt"
05.

06.
:: soundfile   - Pfad der Audiodatei
07.
:: soundvolume - Lautstärke (0...100)
08.
:: soundloop   - Audiodatei in Endlosschleife abspielen (0=nein, 1=ja)
09.
:: soundplay   - 0=Pause, 1=Play
10.
:: soundstop   - 0=Player laufen lassen, 1=Player und JScript beenden
11.
set "soundfile=Sound.mp3"
12.
set /a "soundvolume=50,soundloop=1,soundplay=1,soundstop=0"
13.
>"%settingfile%" set sound
14.

15.
start "" /b cscript //nologo //e:jscript "%~f0" "%settingfile%"
16.

17.
>nul timeout /t 10
18.
echo 2s Pause
19.
set "soundplay=0"
20.
>"%settingfile%" set sound
21.
timeout /t 2
22.
set "soundplay=1"
23.
>"%settingfile%" set sound
24.

25.
>nul timeout /t 5
26.
echo(&echo Volume 30
27.
set "soundvolume=30"
28.
>"%settingfile%" set sound
29.

30.
>nul timeout /t 5
31.
echo(&echo Andere Datei
32.
set "soundfile=Distrust.mp3"
33.
>"%settingfile%" set sound
34.

35.
::>nul timeout /t 10
36.
::echo(&echo Player stoppen und JScript beenden
37.
::set "soundstop=1"
38.
::>"%settingfile%" set sound
39.

40.
pause
41.
exit /b
42.

43.
                          ********** JScript part **********/
44.
var objService = WScript.CreateObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\cimv2'),
45.
    objFSO = WScript.CreateObject('Scripting.FileSystemObject'),
46.
    objPlayer = WScript.CreateObject('WMPlayer.OCX.7'),
47.
    objFile, arrLine, strSoundfile;
48.
objPlayer.settings.autoStart = true;
49.
objPlayer.settings.mute = false;
50.
objPlayer.settings.volume = 50;
51.

52.
while (true) {
53.
  objFile = objFSO.OpenTextFile(WScript.Arguments(0), 1);
54.
  while (!objFile.atEndOfStream) {
55.
    arrLine = objFile.ReadLine().split('=');
56.
    if (arrLine.length > 1) {
57.
      switch(arrLine[0]) {
58.
        case 'soundfile':
59.
          if (strSoundfile != arrLine[1]) {
60.
            strSoundfile = arrLine[1];
61.
            objPlayer.URL = strSoundfile;
62.
          }
63.
          break;
64.
        case 'soundloop':
65.
          objPlayer.settings.setMode('loop', parseInt(arrLine[1]));
66.
          break;
67.
        case 'soundplay':
68.
          if (parseInt(arrLine[1])) {
69.
            objPlayer.controls.play();
70.
          } else {
71.
            objPlayer.controls.pause();
72.
          }
73.
          break;
74.
        case 'soundstop':
75.
          if (parseInt(arrLine[1])) {
76.
            objPlayer.close();
77.
            WScript.Sleep(100);
78.
            WScript.Quit();
79.
          }
80.
          break;
81.
        case 'soundvolume':
82.
          objPlayer.settings.volume = parseInt(arrLine[1]);
83.
          break;
84.
      }
85.
    }
86.
  }
87.
  objFile.Close();
88.
  if (objService.ExecQuery('SELECT * FROM Win32_Process WHERE Name=\'cmd.exe\' AND CommandLine LIKE \'%"' + WScript.ScriptFullName.replace(/\\/g, '\\\\') + '"%\'').Count != 1) {
89.
    objPlayer.close();
90.
    WScript.Sleep(100);
91.
    WScript.Quit();
92.
  }
93.
  WScript.Sleep(500);
94.
}
Wie's funktioniert:
- Die Datei wird einmal von cmd.exe als Batch und parallel von cscript.exe als JScript ausgeführt.
- Die erste Zeile ist valider Code in Batch und JScript und dient dazu einen JScript Kommentar einzuleiten.
- Alles zwischen /* und */ ist in JScript ein Kommentar und wird ignoriert.
- exit /b beendet den Batchprozess, alles was danach kommt wird nicht mehr gesehen.

- Im Batchcode hast du 5 Variablen (Erklärung im Code), die alle mit sound beginnen.
- Ein set sound listet alle Name=Wert Paare bei denen der Name mit sound beginnt, diese Wertepaare werden nach einem Update der Variablen in die Settingsdatei geschrieben.
- Der JScript Code liest diese Werte in einer Pollingschleife aus und nutzt sie entsprechend.

Natürlich kannst du auch mit einem anderen Script auf die Settingsdatei zugreifen, à la
01.
@echo off &setlocal
02.
set "settingfile=settings.txt"
03.

04.
:: aktuelle Werte einlesen
05.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
06.
:: bestimmten Wert ändern
07.
set "soundvolume=70"
08.
:: Werte zurückschreiben
09.
>"%settingfile%" set sound
Aber Vorsicht, je mehr Prozesse auf die Datei zugreifen, desto größer die Gefahr, dass das gleichzeitig passiert, was zu Data Races führt.

Grüße
rubberman
Bitte warten ..
Mitglied: clragon
25.10.2016 um 22:48 Uhr
Oh mein gott.

rubberman, du bist irgendwie Wahsinnig ( Wahnsinnig toll, natürlich ). Genau wie es sein sollte!
Danke, das ist perfekt!! Das ist echt ne menge Code, und damit kann man sehr gut was anfange, vielen dank!
Okey es laggt etwas beim starten, ist aber egal, Ich hab schon eine Loading screen entwickelt der auf das laufen des Musik Prozesses wartet. Oh warte den kann ich jetzt wegwerfen da ich den Prozess nie mehr wider finde... hahaha! egal. trotzdem nochmal danke ich find gar keine Worte dafür.
Damit wäre ich meinem Videospiel was mir alle ausreden möchten einen schritt näher gekommen. Schade zwar das es nicht Unterbrechungsfrei ist, aber das war es ja noch nie. Ähm und irgendwie scheint es noch etwas unaufgeräumt, die Sound Settings hat keine Variable im JS Player weshalb man keinen effekt hat. Ich werds mal etwas umschreiben dann.

Btw; Ich hab ja das letzte mal noch von einem Map Drawer gesprochen. nun dieser funktioniert auch, wenn auch im Moment schrecklich ineffizient, und meine nächste Frage wird wahrscheinlich um das nächste Problem das ich darin habe gehen. Wenn es dich intressiert
Bitte warten ..
Mitglied: rubberman
26.10.2016 um 01:33 Uhr
Hallo clragon.

Sound Settings hat keine Variable im JS Player weshalb man keinen effekt hat.
Was meinst du? Den Dateiname der Settingsdatei? Der wird beim Aufruf von cscript übergeben und ist somit im JScript als WScript.Arguments(0) abgreifbar. (siehe Zeile 53 oben)

Ich hab ja das letzte mal noch von einem Map Drawer gesprochen
Der Kern des Scripts kommt mir sehr bekannt vor (bin Mod bei DosTips).

Grüße
rubberman
Bitte warten ..
Mitglied: clragon
29.10.2016 um 20:15 Uhr
Öhm... wollte heute in mein game implementieren das es die Musik startet beim Level start und wieder beendet.

Nur... Die musik startet nicht wenn ich den Player von einer anderen Batch aus starte. Nur wenn ich ihn als batch an sich starte.
Bitte warten ..
Mitglied: rubberman
30.10.2016 um 02:02 Uhr
Sorry, aber ich kann dir nicht folgen.

Also, die Batchdatei mit dem JScript Teil startet cscript.exe mit dem eigenen Dateinamen und rennt somit den Player.

Wie du von einem anderen Batchscript die Settingsdatei ändern kannst, habe ich dir gezeigt. Wenn du so etwas machst, musst du darauf achten, dass du die Variablen in jedem Script aktualisierst, bevor du sie änderst und zurückschreibst. Macht die Zeile
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
Wenn du das nicht tust, nimmt ein anderes Script (z.B. das mit dem JScript) die in diesem Prozess gültigen Variablen und überschreibt Änderungen, die von einem anderen Prozessgemacht wurden.

Keine Ahnung, ob das dein Problem ist, das ist aber das einzige was ich dir so explizit nicht vorgekaut hatte.
Bitte warten ..
Mitglied: clragon
01.11.2016, aktualisiert um 18:06 Uhr
Das wusste ich schon. Ich meine die Main batch stellt die settings ein und startet dann die Music.bat aber die Musik startet nicht. Starte ich sie einfach so funktioniert es. Warum?
Bitte warten ..
Mitglied: rubberman
01.11.2016 um 19:57 Uhr
Der Fahrer setzt sich ins Auto, aber der Motor springt nicht an. Warum?
Weil der Zündschlüssel nicht steckt, weil die Batterie leer ist, weil die Sicherung durch ist, weil der Anlasser kaputt ist, weil kein Benzin im Tank ist, weil die Kolbenrückzugsfeder klemmt, ...

Wie wär's mal mit dem Code?
Bitte warten ..
Mitglied: clragon
02.11.2016 um 13:03 Uhr
01.
:: start
02.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
03.
set "soundvolume=70"
04.
>"%settingfile%" set sound
05.

06.
start "%title%" "%cd%\sound\Music.bat"
07.

08.
:: stop 
09.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
10.
set "soundstop=1"
11.
>"%settingfile%" set sound
Bitte warten ..
Mitglied: rubberman
02.11.2016 um 18:22 Uhr
START lässt Music.bat asynchron laufen. Das heißt, es wird nicht gewartet bis Music.bat beendet wird und das aufrufende Script wird weiter ausgeführt.

Folgendes passiert also:
- die Settings werden verändert
- Music.bat wird asynchron gestartet
- diese startet das JScript mit dem Player asynchron
- gleichzeitig wird soundstop vom ersten Prozess auf 1 gesetzt
- die Pollingschleife des JScripts liest diese neue Einstellung und beendet sich selbst
Bitte warten ..
Mitglied: clragon
03.11.2016 um 19:47 Uhr
verstehe. Wie umgehe ich das am besten? Ich möchte sie nicht ins Main script mit einbinden, das würde wahrscheinlich nicht so gut funktionieren. Ich könnte stattdessen eine andere batch starten welche Music.bat einfach in sich aufnimmt in dem sie nur den Namen aufruft.
Bitte warten ..
Mitglied: rubberman
03.11.2016 um 21:07 Uhr
Wenn ich wüsste, wie das gewünschte Verhalten aussehen soll ...

start "%title%" /wait "sound\Music.bat"
oder
start "%title%" /wait /b "sound\Music.bat"
oder
start "%title%" /d "sound" /wait /b "sound\Music.bat"
vielleicht?
Bitte warten ..
Mitglied: clragon
03.11.2016 um 21:27 Uhr
Unpraktisch ist: wenn ich auf sie warte, und sie läuft in einem loop, warte ich ewig.

Ich beschreib das mal hier: Das Spiel an sich sollte die Settings der Musik bat einstellen, Diese starten, und danach die erste stage in sich selbst laden. die Musik würde dann im Hintergrund in einem loop laufen laufen. Außerdem würde sie durch ein Zusatztool vor dem Spieler versteckt werden. ( weiss ich schon wie das funktioniert ) . Sobald die Stage vorüber ist, werden die Einstellungen einfach auf Musik Stop = 1 gesetzt und die Musik beendet sich selbst. Ich hatte auch geplant SFX einzubauen ( wie auch immer ) welche vielleicht über eine leicht abgeänderte Kopie der Musik bat laufen und halt keine Wiederholung haben. Die Stages sind im Moment Batches welche einfach in der Main gestartet werden, sollten aber später dann in-built sein. Sie sind nur zum debuggen extern gelagert.

Fals es dir weiterhilft kann ich das ganze Script hochladen, darin sind aber keine wichtigen Informationen gelagert.
Bitte warten ..
Mitglied: rubberman
03.11.2016 um 22:10 Uhr
Ich verstehe nur die Hälfte.
Du setzt soundstop=1, wenn du den Player beenden willst. Wenn du danach soundstop=0 setzt, fängt der nicht plötzlich wieder an zu rennen. Vermutlich willst du mit soundplay=0 auf Pause setzen?
Du musst auch nichts mit irgendwelchen Zusatztools verstecken. Music.bat braucht nichts auszugeben, darum kannst du ruhigen Gewissens mit START /B arbeiten. Dann rennen beide Prozesse mit nur einem Fenster. Wird dieses Fenster geschlossen, dann werden beide Prozesse beendet. Und da das JScript überwacht, ob Music.bat noch läuft, wird der Player somit auch beendet. Im Zweifelsfall brauchst du also die Einstellung soundstop=1 niemals.
Bitte warten ..
Mitglied: clragon
03.11.2016 um 22:23 Uhr
Hier: http://pastebin.com/7gwBuHG2
Dann gibt's weniger Missverstädnisse.
Bin mal im Bett gute Nacht
Bitte warten ..
Mitglied: rubberman
04.11.2016 um 00:41 Uhr
Dann gibt's weniger Missverstädnisse.
Wieso? Meinst du der Code rennt bei mir ohne die anderen Tools und Scripts, die dort eingebunden sind und deren Inhalt ich nicht kenne?

>>"Finding the smallest program that demonstrates the error" is a powerful debugging tool.<< [Bjarne Stroustrup, founder of C++]

Struktur:
│   main.bat
│   Room1.bat
│   Room2.bat
│   Settings.bat
└───sound
        Music.bat
        settings.txt
        test.mp3
main.bat
01.
@echo off &setlocal enabledelayedexpansion enableextensions
02.
set title=Testgame
03.
Title %title%
04.

05.
set "settingfile=sound\settings.txt"
06.

07.
echo(&echo rufe Settings.bat auf
08.
call "Settings.bat"
09.

10.
echo(&echo starte Music.bat
11.
start "" /b cmd /c "%cd%\sound\Music.bat"
12.

13.
echo(&echo rufe Room1.bat auf
14.
call "Room1.bat"
15.

16.
echo(&echo Music PAUSE
17.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
18.
set "soundplay=0"
19.
set "soundfile=dummy.mp3"
20.
>"%settingfile%" set sound
21.

22.
timeout /t 2
23.

24.
echo(&echo Music PLAY, ggf. Soundfile aendern (ich hab nur test.mp3, aber was soll's)
25.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
26.
set "soundplay=1"
27.
set "soundfile=test.mp3"
28.
>"%settingfile%" set sound
29.

30.
echo(&echo rufe Room2.bat auf
31.
call "Room2.bat"
32.

33.
echo(&echo Music STOP
34.
for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
35.
set "soundstop=1"
36.
>"%settingfile%" set sound
37.

38.
pause
Room1.bat
01.
echo *** I am Room1 ***
02.
timeout /t 10
Room2.bat
01.
echo *** I am Room2 ***
02.
timeout /t 10
Settings.bat
01.
if exist "%settingsfile%" for /f "usebackq delims=" %%i in ("%settingfile%") do set "%%i"
02.
set "soundfile=test.mp3"
03.
set /a "soundvolume=50,soundloop=1,soundplay=1,soundstop=0"
04.
>"%settingfile%" set sound
Music.bat
01.
@if (@a)==(@b) @end      /*********** Batch part ***********
02.

03.
@echo off &setlocal
04.

05.
cd /d "%~dp0"
06.
set "settingfile=settings.txt"
07.
start "" /b /wait cscript //nologo //e:jscript "%~f0" "%settingfile%"
08.
exit /b
09.

10.
                          ********** JScript part **********/
11.
var objService = WScript.CreateObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\cimv2'),
12.
    objFSO = WScript.CreateObject('Scripting.FileSystemObject'),
13.
    objPlayer = WScript.CreateObject('WMPlayer.OCX.7'),
14.
    objFile, arrLine, strSoundfile;
15.
objPlayer.settings.autoStart = true;
16.
objPlayer.settings.mute = false;
17.
objPlayer.settings.volume = 50;
18.

19.
while (true) {
20.
  objFile = objFSO.OpenTextFile(WScript.Arguments(0), 1);
21.
  while (!objFile.atEndOfStream) {
22.
    arrLine = objFile.ReadLine().split('=');
23.
    if (arrLine.length > 1) {
24.
      switch(arrLine[0]) {
25.
        case 'soundfile':
26.
          if (strSoundfile != arrLine[1]) {
27.
            strSoundfile = arrLine[1];
28.
            objPlayer.URL = strSoundfile;
29.
          }
30.
          break;
31.
        case 'soundloop':
32.
          objPlayer.settings.setMode('loop', parseInt(arrLine[1]));
33.
          break;
34.
        case 'soundplay':
35.
          if (parseInt(arrLine[1])) {
36.
            objPlayer.controls.play();
37.
          } else {
38.
            objPlayer.controls.pause();
39.
          }
40.
          break;
41.
        case 'soundstop':
42.
          if (parseInt(arrLine[1])) {
43.
            objPlayer.close();
44.
            WScript.Sleep(100);
45.
            WScript.Quit();
46.
          }
47.
          break;
48.
        case 'soundvolume':
49.
          objPlayer.settings.volume = parseInt(arrLine[1]);
50.
          break;
51.
      }
52.
    }
53.
  }
54.
  objFile.Close();
55.
  if (objService.ExecQuery('SELECT * FROM Win32_Process WHERE Name=\'cmd.exe\' AND CommandLine LIKE \'%"' + WScript.ScriptFullName.replace(/\\/g, '\\\\') + '"%\'').Count != 1) {
56.
    objPlayer.close();
57.
    WScript.Sleep(100);
58.
    WScript.Quit();
59.
  }
60.
  WScript.Sleep(500);
61.
}
Bitte warten ..
Mitglied: clragon
09.11.2016, aktualisiert um 13:26 Uhr
Dann gibt's weniger Missverstädnisse.
Wieso? Meinst du der Code rennt bei mir ohne die anderen Tools und Scripts, die dort eingebunden sind und deren Inhalt ich nicht kenne?
"Finding the smallest program that demonstrates the error" is a powerful debugging tool. [Bjarne Stroustrup, founder of C++]


Deswegen:
Ich verstehe nur die Hälfte.
und Deswegen:
Wenn ich wüsste, wie das gewünschte Verhalten aussehen soll ...

Jetzt weißt du es ja. Außerdem hättest du dir ja einfach 3 Zeilen Code rausnehmen können und diese bearbeiten, da der Rest des Codes offensichtlich funktioniert und eher weniger mit dem Problem zu tun hat, Dann hättest du auch kein Problem mit den Zusatz-Dateien gehabt,
Diese sind nämlich genau dazu da, 1-Batch spezifische Fehler zu vermeiden, und eine unabhängige Umgebung zu schaffen. Ich habe dies auch bei dem oben beschriebenem Problem versucht.

Keine Ahnung, ob das dein Problem ist, das ist aber das einzige was ich dir so explizit nicht vorgekaut hatte.

Danke, ich wusste bereits wie sich dein Code verhält.
Ich finde es sehr nett das du hilfst, und du bist auch jemand bei dem auch wirklich eine Lösung herauskommt.
Aber ich möchte nicht wie ein Anfänger oder Endbenutzer behandelt werden, der keine 3 Zeilen Code schreiben kann.
Ich frage diese Fragen, ohne vorher 20 min aufzuzählen was ich bereits weiß und offensichtlich ist, weil es manchmal einfacher ist Jemanden zu fragen der noch mehr Ahnung hat, das Problem bereits kennt, oder ein Profi auf dem Gebiet ist, anstatt den ganzen tag zu verschwenden, Google abzugrasen.

Meine Fehler sind oft nicht super-Standard, weil diese Fehler habe ich bereits gelesen und gelöst, sie sind ja überall beschrieben. Ich versuche dieses Forum möglichst nicht mit Standard Fragen zu Fluten, da sich dann ganz viele Benutzer an den Kopf fassen würden, und man diese ja auch einfach irgendwo nachlesen kann. Meistens sind es komplexere Probleme, offensichtlich unmöglich, gar nicht erst lösbar, Dinge viel zu spezifisch, als das sie jemand schon gefragt hätte, noch nie in diesem Rahmen vorhanden, oder noch nie so gefragt. Ich versuche dann die Fragen so zu stellen das man das versteht.
Wenn es hilft, das ich in Zukunft alle schon gesehenen Lösungen beschreibe, oder das Problem noch genauer Beschreibe, kann ich das gerne tun wenn das bei dessen Lösung hilft.
Bitte warten ..
Mitglied: rubberman
09.11.2016 um 18:03 Uhr
Versetz dich mal in meine Lage. Ich sitze hier mit der Kristallkugel in der Hand und sehe nichts. Die einzige Informationsquelle für die Helfer in einem Forum, ist der der fragt. Die Antworten auf deine Fragen können also nicht besser sein, als die Informationen die du lieferst.
Es bringt mir nichts, wenn du mir ein Script zur Verfügung stellst, das hunderte Zeilen Code enthält, aber nicht den Fehler repräsentiert, weil es nur ein Teil deines Gesamtpakets ist und bereits beim Versuch es auszuführen wegen ganz anderer Fehler abbricht.
Mir hätten 20 Zeilen Code gereicht, die deinen Fehler reproduzieren, zusammen mit einer Erklärung an welcher Stelle du Hilfe brauchst. Nichts anderes habe ich nun selbst gemacht und dir gezeigt, wie es aussehen könnte. Ob das nun die Lösung für dein Problem war, weiß ich immer noch nicht, da ich mir irgendwas aus den Fingern gesogen habe, was die Aufrufe und den Inhalt der anderen Scripts angeht. Woher soll ich denn wissen, welches nun die 3 Zeilen Code sind, bei denen du ein Problem hattest? Und woher soll ich wissen, ob das Problem tatsächlich in diesem Code steckt und nicht im Zusammenspiel mit den anderen Dateien zu suchen ist? Ich verstehe ja deinen Unmut, aber sorry, wie soll ich denn darauf reagieren? Mir die Arbeit zu ersparen, ein Beispiel zu coden und deine Frage zu ignorieren, wäre natürlich auch eine Option gewesen ...
Bitte warten ..
Ähnliche Inhalte
iOS
Apple Musik
Frage von Jonnie11iOS2 Kommentare

Hallo, wenn ich im iTunes Store was kaufe, wird der gekaufte Artikel, trotz Download und Offline Verfügbarkeit nicht in ...

Windows 10

Windows 10 Musik-App - Musik aus Netzlaufwerk anzeigen?

gelöst Frage von tombola22Windows 102 Kommentare

Hallo zusammen, ich habe meine gesamte Musik auf einem Synology NAS liegen und möchte vom Laptop/Surface aus gerne die ...

Mac OS X

Musik zu MP3 Konvertieren

Frage von gamerffMac OS X7 Kommentare

Hallo Forum, ich habe mir einen neuen Mac gekauft und kenne mich noch nicht so ganz damit aus. Ich ...

VB for Applications

Musik-Loop in VBS

gelöst Frage von IleiesVB for Applications3 Kommentare

Hallo zusammen, Ich habe folgendes Programm geschrieben: Durch das Programm wird eine Musikdatei einmal im Hintergrund abgespielt. 1) Wie ...

Neue Wissensbeiträge
Google Android

Heise: Google sperrt Android-Updates und den Play Store für Huawei

Information von Deepsys vor 6 StundenGoogle Android4 Kommentare

Das finde ich schon ein starkes Stück, Trump der Welt Diktator. So kann man mit einem Dekret mal eben ...

Windows 7

Südkoreas Regierung setzt auf Linux, um Windows 7 Clients abzulösen

Information von kgborn vor 17 StundenWindows 74 Kommentare

Kleiner Infosplitter zum Wochenanfang: Während München (LiMux) und die niedersächsische Finanzverwaltung von Linux auf einen Windows 10-Client (und Office) ...

Internet
Big Brother is Watching You
Information von transocean vor 1 TagInternet1 Kommentar

Moin, die Datenkrake Google fischt Informationen über Einkäufe ab, die GMail Nutzer im Netz tätigen. Gruß Uwe

Datenschutz
TeamViewer gehackt !
Information von aqui vor 1 TagDatenschutz6 Kommentare

Hat schon einen Grund warum verantwortungsvolle Admins diese Software nicht einsetzen und sie in den meisten größeren Firmen aus ...

Heiß diskutierte Inhalte
Linux Userverwaltung
Ist sudo auf Servern Pflicht?
gelöst Frage von lcer00Linux Userverwaltung12 Kommentare

Hallo zusammen, wir haben für einige Netzwerkdienste einige Debian Server. Auf diesen Servern arbeiten keine Benutzer im eigentlichen sinne. ...

Batch & Shell
Powershell Datum der zuletzt eingespielten Patche bei remote Servern ermitteln
Frage von bensonhedgesBatch & Shell12 Kommentare

Hallo, ich möchte gerne anhand einer Serverliste (bsp. computers.txt) via PS ermitteln, wann derjeweilige Server zuletzt gepatcht wurde (Liste ...

Humor (lol)
Mitarbeiter meldet: VPN funktioniert nicht
Frage von Epixc0reHumor (lol)11 Kommentare

Servus, einer unserer Mitarbeiter meldete heute, sein VPN funktioniert Zuhause nicht, im LTE Netz aber schon. Per Teamviewer hin ...

Netzwerkgrundlagen
Netzwerk IP Kamera nur an einem Rechner sichtbar
Frage von Lutz-ReNetzwerkgrundlagen9 Kommentare

Guten Abend Ich hab in einem IP 4 Netzwerk mit gleichen Subnetz zwei Kameras mit festen IP Adresse und ...