2017-03-07 2 views
0

Je fais donc un jeu en programmation par lots et j'ai décidé d'ajouter de la musique à thème à l'écran du menu titre. La façon dont j'ai ajouté la musique était en utilisant WScript et un VBScript pour lire un fichier mp3. Le seul problème est que, une fois démarré, il joue en arrière-plan et non via le fichier séquentiel, par conséquent, une fois que vous démarrez le jeu, la musique du thème continue à jouer. J'ai utilisé ce script pour de petits sons simples qui se terminent rapidement, donc ça n'a jamais été un problème auparavant.Comment arrêter un programme VBScript démarré dans un programme de traitement par lots?

Donc ma question est, est-il possible d'arrêter le script à partir du fichier de traitement par lots au lieu d'avoir à faire le vieux Ctrl +Alt +méthode Del?

Voici mon script texte:

set music=ThemeMusic.mp3 
(echo Set Sound = CreateObject("WMPlayer.OCX.7"^) 
echo Sound.URL = "%music%" 
echo Sound.Controls.play 
echo Do While Sound.currentmedia.duration = 0 
echo WScript.Sleep 100 
echo Loop 
echo WScript.Sleep (Int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs 
start /max sound.vbs 

et est ici le code pour le VBScript séparé qui est ouvert par le fichier batch:

Set Sound = CreateObject("WMPlayer.OCX.7") 
Sound.URL = "ThemeMusic.mp3" 
Sound.Controls.play 
Do While Sound.currentmedia.duration = 0 
    WScript.Sleep 100 
Loop 
WScript.Sleep (Int(Sound.currentmedia.duration)+1)*1000 
+2

Nous pouvons déjà voir votre code créant le Vbscript. Pas besoin de le poster à nouveau. Si vous voulez tuer un programme, utilisez TASKKILL. – Squashman

Répondre

0

Utilisez la commande TASKKILL /IM wscript.exe. Cependant, gardez à l'esprit que cela mettra fin à tous les processus VBScript.

À l'avenir, utilisez TASKKILL /? dans la console pour diverses autres méthodes. Il affichera ce qui suit:

TASKKILL [/S system [/U username [/P [password]]]] 
     { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 

Description: 
    This tool is used to terminate tasks by process id (PID) or image name. 

Parameter List: 
    /S system   Specifies the remote system to connect to. 

    /U [domain\]user Specifies the user context under which the 
          command should execute. 

    /P [password]  Specifies the password for the given user 
          context. Prompts for input if omitted. 

    /FI filter   Applies a filter to select a set of tasks. 
          Allows "*" to be used. ex. imagename eq acme* 

    /PID processid  Specifies the PID of the process to be terminated. 
          Use TaskList to get the PID. 

    /IM imagename  Specifies the image name of the process 
          to be terminated. Wildcard '*' can be used 
          to specify all tasks or image names. 

    /T      Terminates the specified process and any 
          child processes which were started by it. 

    /F      Specifies to forcefully terminate the process(es). 

    /?      Displays this help message. 

Filters: 
    Filter Name Valid Operators   Valid Value(s) 
    ----------- ---------------   ------------------------- 
    STATUS  eq, ne     RUNNING | 
              NOT RESPONDING | UNKNOWN 
    IMAGENAME  eq, ne     Image name 
    PID   eq, ne, gt, lt, ge, le PID value 
    SESSION  eq, ne, gt, lt, ge, le Session number. 
    CPUTIME  eq, ne, gt, lt, ge, le CPU time in the format 
              of hh:mm:ss. 
              hh - hours, 
              mm - minutes, ss - seconds 
    MEMUSAGE  eq, ne, gt, lt, ge, le Memory usage in KB 
    USERNAME  eq, ne     User name in [domain\]user 
              format 
    MODULES  eq, ne     DLL name 
    SERVICES  eq, ne     Service name 
    WINDOWTITLE eq, ne     Window title 

    NOTE 
    ---- 
    1) Wildcard '*' for /IM switch is accepted only when a filter is applied. 
    2) Termination of remote processes will always be done forcefully (/F). 
    3) "WINDOWTITLE" and "STATUS" filters are not considered when a remote 
     machine is specified. 

Examples: 
    TASKKILL /IM notepad.exe 
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T 
    TASKKILL /F /IM cmd.exe /T 
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" 
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe 
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM * 
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*" 
+0

Est-il possible de terminer un script vbs spécifique de cette façon ou faut-il mettre fin à tous les scripts vbs? – Haxz4Lyfe

+0

Seulement si le VBScript a une fenêtre ouverte avec un titre unique. –