Problème avec Delay()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Problème avec Delay()

Message par cage »

Bonjour a tous,

Je cherche a réaliser une application sleep.exe équivalente a la commande dos timeout
Syntaxe de la commande timeout: timeout/t <TimeoutInSeconds> [/nobreak]
La commande timeout affiche un décompte dans la console que je ne désire pas, c'est pourquoi je cherche a faire ma propre commande timeout (sleep.exe)
L'utilisation de la commande Delay() dans une application ligne de commande semble ne pas fonctionner.
Compilez le code suivant en test.exe et exécutez le dans une console cmd.exe, cela ne donne rien.

Code : Tout sélectionner

Delay(5000)
Le Delay(5000) n’arrête pas le déroulement du programme en mode compilé mais fonctionne correctement en mode IDE
Voici le code de l'application que je voulais créer:

Code : Tout sélectionner

EnableExplicit  ; all the variables must be declared

OnErrorGoto(?ErrorHandler)

Define count = CountProgramParameters()

Define info.s, myparam.s

Define result, seconds

Define rcode = #False

If count
  myparam = ProgramParameter(0)
  seconds = Val(myparam)
  For count = 1 To seconds
    Delay(1000)
  Next
  rcode = #True
Else
  rcode = #False
  info = "Arguments are: Sleep <seconds>" + #CRLF$
  result = MessageRequester("Sleep", info, #PB_MessageRequester_Ok|#PB_MessageRequester_Info)
EndIf

ErrorHandler:

End rcode
En complément, je voudrais pouvoir afficher directement dans la console DOS (cmd.exe) la syntaxe de la commande sleep lorsqu'on ne lui passe aucun argument.
Exemple, taper sleep dans la console DOS donnerait
Arguments are: Sleep <seconds>
en retour.
Merci pour l'aide que vous pourrez m'apporter.
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Problème avec Delay()

Message par Marc56 »

La commande timeout affiche un décompte dans la console que je ne désire pas, c'est pourquoi je cherche a faire ma propre commande timeout
La redirection (> null) équivalent à (> /dev/nul) unix permet de ne pas avoir d'écho console.
Exemple:

Code : Tout sélectionner

timeout /t 3 > null & echo Hello World
L'utilisation de la commande Delay() dans une application ligne de commande semble ne pas fonctionner.
Ceci fonctionne

Code : Tout sélectionner

OpenConsole()
Delay(3000) 
Print("Ready")
OpenConsole doit appelé au début du programme même si le programme est compilé en mode console et lancé depuis une console déjà ouverte.
En complément, je voudrais pouvoir afficher directement dans la console DOS (cmd.exe) la syntaxe de la commande sleep lorsqu'on ne lui passe aucun
Comme cela:

Code : Tout sélectionner

  ;result = MessageRequester("Sleep", info, #PB_MessageRequester_Ok|#PB_MessageRequester_Info)
  OpenConsole() ; <- Mieux au début du programme
  PrintN(info)
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Problème avec Delay()

Message par cage »

Merci Marc56 pour ta réponse très complète.

Je connais un peu OpenConsole() bien que je ne l'utilise pas car elle n'a pas d’intérêt pour moi.

OpenConsole() ouvre une fenêtre console alors que moi, je cherche a travailler en mode batch ou en mode console (interactif) dans une "Invite de commandes" Windows.

Une fois compilée, mon application est utilisée dans un fichier .bat ou .cmd

Le délais doit intervenir dans le batch (comme le fait timeout) et la sortie des messages aussi.

C'est là que je coince. PB ne semble pas fait pour pouvoir faire ce genre de chose. J’espère me tromper.

Si tu as une idée, je suis preneur.

Dans la réalité, je suis coincé avec plusieurs applications consoles que je n'arrive pas a créer en PB alors que je n'avais aucun soucis avec VB (et oui, je viens de VB 1 a 6 Entreprise)
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Problème avec Delay()

Message par djes »

Openconsole() ouvre une console s'il n'y en a pas. Quand tu es déjà dans une console, il n'en ouvre pas... J'utilise pb pour ce genre d'applis depuis longtemps et ça fonctionne très bien, si tu as des soucis n'hésite pas on trouvera toujours !
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Problème avec Delay()

Message par cage »

Merci djes, mais non.
Voici le code test.pb que je compile en test.exe:

Code : Tout sélectionner

OpenConsole()

Delay(5000)

PrintN("Tems écoulé")
J'ouvre une "Invite de commandes" Windows par clic droit sur le menu Démarrer/Invite de commande
Je vais dans le dossier qui contient test.pb et test.exe

Code : Tout sélectionner

Y:\PB\PB2\SLEEP>test

Y:\PB\PB2\SLEEP>
Une fenêtre test s'ouvre, puis se ferme au bout de 5 secondes et je n'ai rien d'affiché dans mon "Invite de commande"
Je n'ai jamais compris pourquoi je ne peux pas utiliser certaines commandes dans un .exe non fenêtré.
Pourquoi un simple Delay(5000) ne peut pas fonctionner hors d'un OpenWindow() ou OpenConsole()
Pourquoi ne peut-on pas afficher du texte en dehors d'un OpenWindow() ou OpenConsole()
J'avoue que je suis un peu frustré sur ce coup.
Il doit bien y avoir une solution.
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec Delay()

Message par Zorro »

tu compiles ce code en mode console
dans un dossier tu l'appelles "test.exe"

Code : Tout sélectionner


OpenConsole("test")
Delay(10000)
CloseConsole()
ensuite tu ouvre la console windows a l'emplacement du prg
et dans le shell , tu tapes ceci
.\test
ça va attendre 10 secondes avant de te rendre la main :)

ne pas oublier le ".\" avant la commande "test"
car il y a une protection avec Windows 10 et ce code permet de demander a win10 de lancer le code sans protection

je viens de tester chez moi ça marche :)
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Problème avec Delay()

Message par cage »

@Zorro
tu compiles ce code en mode console
J'ai du manquer quelque chose. Comment je compile en mode console ?
Autrement, j'ai toujours le même résultat, depuis la console Windows cela m'ouvre une autre fenêtre "test"
Je ne reste pas dans la console Windows.
Que je lance par test.exe ou .\test.exe
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec Delay()

Message par Zorro »

le mode console avec l'editeur officiel c'est menu "compiler"
compiler option
executable Format , tu choisis console !

avec EPB c'est menu projet "creer console"

pour ce qui est de la fenetre console, ben tu la fais disparaitre comme ça :

Code : Tout sélectionner

Import ""
      GetConsoleWindow()
EndImport


OpenConsole()

;Caché la console d'aprés le handle de la console
ShowWindow_(GetConsoleWindow(), #SW_HIDE)

Delay(10000)
CloseConsole()



Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Problème avec Delay()

Message par cage »

Merci Zorro

Je ne sais pas comment j'ai pu louper cette option. Certainement l'age.

Tout fonctionne comme je le veux, c'est parfait.

Encore merci a tous pour votre aide.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec Delay()

Message par Zorro »

:)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Problème avec Delay()

Message par djes »

cage a écrit :Merci Zorro

Je ne sais pas comment j'ai pu louper cette option. Certainement l'age.

Tout fonctionne comme je le veux, c'est parfait.

Encore merci a tous pour votre aide.

cage
Tu n'es pas le seul... Ça m'est arrivé plein de fois, et c'est de pire en pire :lol:
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Problème avec Delay()

Message par cage »

Voici le code qui fonctionne tel que je le souhaitais au départ.
Il ne manquait pas grand chose.

Code : Tout sélectionner

;
;************************************************************************
;Titre      : sleep.pb
;Auteur     : (C) 2017 CAGE
;Date       : 2017/09/16
;Version PB : PureBasic 5.61 (Windows - x86)
;Version PB : PureBasic 5.61 (Windows - x64)
;Compiler Options
;Compiler Options : Executable format: Console
;Compile/Run      : Create temporary executable in the source directory
;
;Libairies: aucunes
;
;************************************************************************
;

EnableExplicit  ; all the variables must be declared

OnErrorGoto(?ErrorHandler)

Define count = CountProgramParameters()

Define info.s, myparam.s

Define result, seconds

Define rcode = #False

#myhome = "pbcage.free.fr"

If count
  myparam = ProgramParameter(0)
  seconds = Val(myparam)
  For count = 1 To seconds
    Delay(1000)
  Next
  rcode = #True
Else
  OpenConsole()
    PrintN(#Null$)
    PrintN("Arguments are: Sleep <seconds>")
    PrintN(#Null$)
    PrintN(#myhome)
  CloseConsole()
  rcode = #False
EndIf

ErrorHandler:

End rcode
Voici le résultat de sleep sans argument:

Code : Tout sélectionner

Y:\PB\PB2\SLEEP>sleep

Arguments are: Sleep <seconds>

pbcage.free.fr

Y:\PB\PB2\SLEEP>
J’espère que la pratique de PB aide a rester jeune dans sa tête. 8)
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre