IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Stopper ou pauser un script par le clavier


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Points : 17
    Points
    17
    Par défaut Stopper ou pauser un script par le clavier
    Bonjour à tous,
    j'ai un script qui demande beaucoup de temps d’exécution (genre plusieurs jours), et j'aimerais savoir s'il est possible de l'arrêter d'une certaine façon, par exemple par une pression sur le clavier.
    L'idée est de pouvoir à cet instant récupérer ce qui a été traité afin de ne pas avoir à le refaire, et même de pouvoir reprendre le traitement là où il s'est arrêté.

    Mais je sens déjà que je demande l'impossible.....

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par ramkin Voir le message
    Bonjour à tous,
    j'ai un script qui demande beaucoup de temps d’exécution (genre plusieurs jours), et j'aimerais savoir s'il est possible de l'arrêter d'une certaine façon, par exemple par une pression sur le clavier.

    Il fait quoi exactement votre script
    Pouvez-vous le poster et

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    C'est le jeu de Juniper Green.
    Vous prenez la liste des nombres de 1 à 100.
    Vous choisissez un nombre x1, et le rayez de cette liste.
    Vous choisissez un nombre x2 qui doit être un diviseur ou un multiple de x1, et le rayer de la liste.
    Et ainsi de suite, le but étant de faire une suite (xn) la plus longue possible.

    Il y a surement des milliards de possibilités, et j'aimerais donc essayer de traiter ce problème informatiquement.

    Voici le code, demadez si vous voulez plus d'explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
     
    dim taille,liste_de_base,fin,nombre_de_diviseurs_multiples,temps_de_depart,fichier_final,nombre_possibilites,taille_plus_longue_possibilite
     
    Sub initialisation()
    	Dim choix,depart,ligne_fin,infos
    	choix = MsgBox("Reprendre le calcul? OUI" & chr(13) & "Recommencer à zéro?   NON",4)
    	If choix = 7 Then ' Si choix = NON
    		taille = InputBox("Tapper la taille du nouveau tableau")
    		For i = 1 to taille
    			liste_de_base = liste_de_base & i & "_"
    		Next
    		Set fichier_a_traiter = FSO.CreateTextFile("fichier_a_traiter.txt",true)
    		For depart = 1 to taille
    			fichier_a_traiter.WriteLine depart & "_" & "*" & modifie(liste_de_base,depart)
    		Next
    		fichier_a_traiter.Close
    		Set fichier_final = FSO.CreateTextFile("resultat_algorithme_juniper_green_version2.txt",true)
    		fichier_final.WriteLine "Algorithme de Juniper Green. Taille du tableau : "	& taille
    		fichier_final.WriteLine "Nombre actuel de possibilités;Taille de la plus longue possibilité;Possiblité la plus longue;Temps de traitement"
    		fichier_final.Close
    		nombre_possibilites = 0
    		taille_plus_longue_possibilite = 0
    		temps_de_depart = Time
    	Else
    		Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",1)
    		Do While Not fichier_final.AtEndOfStream
    			ligne_fin = fichier_final.ReadLine
    		Loop
    		infos = Split(ligne_fin,";")
    		nombre_possibilites = infos(0)
    		taille_plus_longue_possibilite = infos(1)
    		temps_de_depart = infos(3)
    	End If		
    	fin = FALSE
    End Sub
     
    Function lister_diviseurs_multiples(nombre,liste_a_traiter)
    	Dim candidat,temp
    	nombre_de_diviseurs_multiples=0
    	While liste_a_traiter<>""
    		candidat = Left(liste_a_traiter,Instr(liste_a_traiter,"_")-1)
    		If nombre MOD candidat = 0 OR candidat MOD nombre = 0 Then
    			temp=temp & candidat & "_"
    			nombre_de_diviseurs_multiples = nombre_de_diviseurs_multiples + 1
    		End If
    		liste_a_traiter = Right(liste_a_traiter, Len(liste_a_traiter)-Instr(liste_a_traiter,"_"))
    	Wend
    	lister_diviseurs_multiples = temp
    End Function
     
    Function cherche_diviseurs_multiples(liste,position)
    	Dim temp
    	temp = liste
    	If position = 1 Then
    		cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
    	Else
    		For i=1 to position-1
    			temp = Mid(temp,InStr(temp,"_")+1)
    			cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
    		Next
    	End If
    End Function
     
    Function modifie(liste,nombre)
    	Dim temp
    	temp = liste
    	If InStr(temp,"_" & nombre & "_") = 0 Then
    		modifie = Mid(temp,Instr(temp,"_")+1)
    	Else
    		modifie = Replace(temp,"_" & nombre & "_","_")
    	End If
    End Function
     
    Sub etudier_chaine(x)
    	nombre_possibilites = nombre_possibilites + 1
    	Dim a,b
    	a = x
    	b = Split(a,"_")
    	If Ubound(b) > taille_plus_longue_possibilite Then
    		taille_plus_longue_possibilite = Ubound(b)
    		Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)	
    		fichier_final.WriteLine nombre_possibilites & ";" & taille_plus_longue_possibilite & ";" & x & ";" & temps_de_traitement()
    		fichier_final.Close
    	End If
    End Sub
     
    Function temps_de_traitement()
    	Dim a
    	a = Hour(temps_de_depart)*3600 + Minute(temps_de_depart)*60 + Second(temps_de_depart)
    	temps_de_traitement = Hour(Time)*3600 + Minute(Time)*60 + Second(Time) - a
    End Function
     
    Sub traitement()
    	fin = TRUE
    	Set fichier_a_traiter = FSO.OpenTextFile("fichier_a_traiter.txt",1)
    	Set fichier_temp = FSO.CreateTextFile("temporaire.txt",true)
     
    	Dim ligne,chaine,liste_restante,liste_diviseurs_multiples,temp,a,b,numero_ligne_a_traiter
     
    	numero_ligne_a_traiter = 0
    	liste_diviseurs_multiples = ""
    	While liste_diviseurs_multiples = "" AND NOT fichier_a_traiter.AtEndOfStream
    		numero_ligne_a_traiter = numero_ligne_a_traiter + 1
    		ligne = fichier_a_traiter.ReadLine
    		chaine = Left(ligne,InStr(ligne,"*")-1)
    		liste_restante = Mid(ligne,InStr(ligne,"*")+1)
    		If liste_restante = "" Then
    			etudier_chaine(chaine)
    		Else
    			a = Replace(Mid(chaine,InStrRev(chaine,"_",Len(chaine)-1)+1),"_","")
    			b = liste_restante
    			liste_diviseurs_multiples = lister_diviseurs_multiples(a,b)
    			If liste_diviseurs_multiples = "" Then
    				etudier_chaine(chaine)
    			Else
    				fin = FALSE
    				For i=1 to nombre_de_diviseurs_multiples
    					temp = cherche_diviseurs_multiples(liste_diviseurs_multiples,i)
    					fichier_temp.WriteLine chaine & temp & "_*" & modifie(liste_restante,temp)
    				Next
    			End If
    		End If
    	Wend
     
    	Do While Not fichier_a_traiter.AtEndOfStream
    		fichier_temp.WriteLine fichier_a_traiter.ReadLine
    	Loop
    	fichier_temp.Close
    	fichier_a_traiter.Close
    	FSO.DeleteFile("fichier_a_traiter.txt")
    	FSO.MoveFile "temporaire.txt","fichier_a_traiter.txt"
    End Sub
     
     
     
    ' ********************      PROGRAMME PRINCIPAL      ******************************
    initialisation()
    passage = 0
    While fin = FALSE
    	traitement()
    Wend
     
    Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)
    fichier_final.WriteLine chr(13) & " ------------         FIN         ---------------------" & chr(13)
    fichier_final.WriteLine "Nombre total de possibilités : " & nombre_possibilites & "     Temps total de traitement : " & temps_de_traitement()
    fichier_final.Close
     
    Wscript.Echo "Terminé"

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    une solution temporaire à tester ,consiste à exécuter un Vbscript : Kill_Wscript.vbs à partir d'un Batch : Killer.bat qui exécute ce dernier par le moteur en ligne de commande Cscript.exe

    Fichier : Kill_Wscript.vbs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Explicit
    Dim Ws,fso,LogFile,Command,Execution,MyDate
    Const Titre = "Tuer les processus KillProcess.vbs © Hackoo © 2013" 
    Set Ws = CreateObject("Wscript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
    If fso.FileExists(LogFile) Then fso.DeleteFile LogFile
    Call Kill("Wscript.exe")
    MsgBox Formater(LogFile),64,Titre
    ws.run LogFile,1,False
     
    Sub Kill(Process)
    	MyDate = "cmd /c echo %date% ^@ %time%  >> "&LogFile&""
    	Command = "cmd /c Taskkill /F /IM "&Process&" >> "&LogFile&""
    	Execution = Ws.Run(MyDate,0,True)
    	Execution = Ws.Run(Command,0,True)
    End Sub
     
    'Fonction pour formater et remplacer les caractères spéciaux unicode dans le LogFile
    Function Formater(LogFile)
    	Dim fso,fRead,fWrite,Text
    	Set fso = CreateObject("Scripting.FileSystemObject")
    	LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
    	Set fRead = fso.OpenTextFile(LogFile,1)
    	Text = fRead.ReadAll
    	fRead.Close
    	Set fWrite = fso.OpenTextFile(LogFile,2,True)
    	Text = Replace(Text,"‚","é")
    	Text = Replace(Text,"ÿ"," ")
    	Text = Replace(Text,"ˆ","ê")
    	Text = Replace(Text,"‡","ç")
    	Text = Replace(Text,"“","ô")
    	Text = Replace(Text,"…","à")
    	Text = Replace(Text,"Š","è")
    	Text = Replace(Text,"ƒ","â")
    	Text = Replace(Text,"?"," ")
    	fWrite.WriteLine Text
    	Formater = Text
    End Function
    Fichier : Killer.bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @echo off
    Cscript Kill_Wscript.vbs

  5. #5
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,
    et même de pouvoir reprendre le traitement là où il s'est arrêté.


    sur le papier la solution est toute simple: faire réagir le script à l'activation d'une "hotkey"
    il y a très peu de composants activex qui fournissent ce genre de fonction et ce sont pratiquement tous des contrôles visuels inutilisables sous WSH
    (sous hta en revanche, un composant comme celui-ci devrait fonctionner : https://www.nsbasic.com/s309/HotKey/)
    le seul composant hotkey fonctionnel sous WHS était le ZedplaceX mais ce freeware écrit en delphi il y a une dizaine d'années
    n'est plus diffusé officiellement par son auteur Christoph Zenker propriétaire de ce site
    tout ça me rappelle que j'avais écris un projet de hotkey "system wide" en 2009 avec le DynamicwrapperX, projet laissé de côté à la suite
    de la découverte d'un bug supposé de ce composant mais son auteur (Yuri Popov) ne m'a jamais répondu.
    en même temps, il avait paumé les sources de son projet dans l'incendie de son pc, ou plus exactement dans l'incendie de la maison dans laquelle sa bécane se trouvait...

    je vais voir si on peut en tirer quelque chose
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

Discussions similaires

  1. Ouvrir menu contextuel par le clavier?
    Par electrosat03 dans le forum Périphériques
    Réponses: 2
    Dernier message: 29/03/2008, 18h45
  2. Lancement d'un script par cron avec cygwin
    Par dupdup dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 04/01/2008, 22h24
  3. script par dessus image
    Par goodvibs dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/03/2007, 11h19
  4. Désactiver l'impression par raccourcis clavier et souris?
    Par delphine71 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/02/2007, 11h10
  5. Réponses: 5
    Dernier message: 25/07/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo