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

 Delphi Discussion :

Lancer un programme via le planificateur de tâches Windows ?


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 228
    Points : 139
    Points
    139
    Par défaut Lancer un programme via le planificateur de tâches Windows ?
    Salut à tous.

    J'ai un bout de code qui télécharge quotidiennement un fichier disponible sur un site web. Quand le programme démarre, j'aimearis qu'il affiche une petite fenêtre avec une barre de progression et qu'il quitte en fin de téléchargement.
    Si je fais une fenêtre avec un bouton qui lance le download, tout va bien.
    Comment afficher une fenêtre, lancer le téléchargement avec barre de progression et quitter ensuite SANS INTERVENTOIN HUMAINE ?
    Si je place le code dans le OnCreate ou le OnShow, le téléchargement se fait mais la fenêtre n'apparaît pas ! Comment faire pour l'afficher ?

    Merci

  2. #2
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    Bonjour

    Si je place le code dans le OnCreate ou le OnShow, le téléchargement se fait mais la fenêtre n'apparaît pas ! Comment faire pour l'afficher ?
    Moi, je mettrais le code dans le OnActivate de la form, car si on met dans OnShow et OnCreate, la fenêtre attend 1 seconde avant de s'afficher alors que dans OnActivate, la fenêtre s'affiche puis attend 1 seconde.

    Comment afficher une fenêtre, lancer le téléchargement avec barre de progression et quitter ensuite SANS INTERVENTOIN HUMAINE ?
    Pour la fermer, il suffirait de mettre juste après le traitement. Quant au lancement de l'application, je pense que l'on peut gérer ça avec Windows(si c'est sous Windows) comme mettre l'exe dans le dossier démarrage.

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    C'est toujours le problème du mono-tâche

    Le but est de ne démarrer le téléchargement que lorsque l'application est chargée. Le mieux pour cela est de s'envoyer un message asynchrone (donc ajouté à la fin de la file de messages) qui ne sera interprété que lorsque l'ensemble des messages de création/affichage auront été exécutés.

    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
    const
      WM_DOWNLOAD = WM_USER;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        procedure Download(var Message :TMessage); message WM_DOWNLOAD;
      end;
     
    procedure TForm1.Download(var Message: TMessage);
    begin
      //Téléchargement
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      PostMessage(Handle, WM_DOWNLOAD, 0, 0);
    end;
    On peut aussi utiliser un TTimer mais le principe reste le même (un message WM_TIMER est post-é).

    Le mieux reste bien sûr de déporter le téléchargement dans un thread dédié

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Le create n'est pas l'endroit idéale pour faire du travail.

    Le create sert a l'initialisation. Si tu dois attendre 2 heures avant d’exécuter le téléchargement, le processus monopolise des ressource inutilement pendant tout ce temps.

    Une façon de faire mieux adapter:

    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       if frac(now)<16/24 then exit;//attend 16:00:00 pour lancer le téléchargement
       timer1.Enabled:=false;
       timer1.intervall:=60000;//tentative à toutes les minutes
       form1.visible:=true;
       Button1Click(Sender);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       ...
       application.processmessages;//ça aide aussi
       ...
     
    //à ajouter a la fin de la procedure
       if telechargementreussi then  application.terminate;
       timer1.enabled:=true;
    end;
    J'oubliais dans le répertoire démarrage tu ajoutes le chemin du programme. comme le précise "Diamant dans un corps d'athlète"

  5. #5
    Membre habitué Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 228
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par Basile le disciple Voir le message
    Bonjour
    Moi, je mettrais le code dans le OnActivate de la form.
    J'ai utilisé ce truc. On imposant un Repaint de la forme dans le OnActivate, ça marche.

    La méthode de sgmsg ne me plaît pas beaucoup. Mettre un bouton et le cliquer à l'aide d'un Timer me paraît drôlement bancal. Mais bon, la fin justifie les moyens.

    Je vais réécrire le code en utilisant les threads pour gérer plusieurs téléchargements simultanés, ça sera plus "pro".

    Merci à tous.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par Laskar Voir le message
    La méthode de sgmsg ne me plaît pas beaucoup. Mettre un bouton et le cliquer à l'aide d'un Timer me paraît drôlement bancal. Mais bon, la fin justifie les moyens.
    C'est certain.

    C'était pour ne pas a avoir a retranscrire tout le programme dans le timer. Code que tu n'avais pas mis...

    De toute façon, c'est parfois c'est utile. Au lancement tu forces un traitement avec timer. Ensuite la propriété timer1.enable devient false donc timer1 arrête. Finalement, tu le appel le traitement manuellement en cliquant sur le bouton...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme ne fonctionne pas via le planificateur de tâches
    Par Jetvosges dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 24/03/2015, 12h48
  2. Réponses: 6
    Dernier message: 11/05/2009, 10h26
  3. lancer un programme avec python 2.5 et Windows Me
    Par denewton dans le forum Général Python
    Réponses: 7
    Dernier message: 22/09/2008, 11h09
  4. [WD8] Planificateur de tâches Windows
    Par goomazio dans le forum WinDev
    Réponses: 6
    Dernier message: 07/03/2007, 13h38
  5. Ouvrir le planificateur de tâches Windows par programme
    Par BBPlastique dans le forum Windows
    Réponses: 8
    Dernier message: 16/07/2004, 11h30

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