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

Fortran Discussion :

Fenêtre dos non visible


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Fenêtre dos non visible
    Bonjour tout le monde,

    Quelqu'un connait-il une instruction/méthode/... en fortran qui permet d'avoir la fenêtre dos invisible à l'écran (ou au moins minimisée) lors de l'éxécution du programme?
    J'utilse déjà l'instruction
    i=SETEXITQQ(2) (de la librairie dflib)
    pour que la fenêtre se ferme automatiquement à la fin de l'exécution. J'ai donc un QuickWinApplication project.
    Ca serait super si quelqu'un avait un tuyau.

    Merci

  2. #2
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    arrete windows, passe à unix....

    sinon cherche dans le Windows API, là tu cherche une fonction windows... comme ton programme est_il lancé? depuis une autre appli de ton jus ou bien depuis l'explorateur?
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par genteur slayer
    arrete windows, passe à unix....

    sinon cherche dans le Windows API, là tu cherche une fonction windows... comme ton programme est_il lancé? depuis une autre appli de ton jus ou bien depuis l'explorateur?
    Merci du conseil....

    Sinon, l'exécutable fortran est lancé à partir d'une application Delphi qui permet d'avoir une interface windows pour le programme (au lieu d'une interface dos!)

  4. #4
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    dans ce cas tu dois utiliser une fonction du genre 'shellexecute' là tu peux choisir de l'exécuté minimisé c'est un début... ce qui dois être possible de faire, j'avais cherché un peu il y a quelques temps, c'est de redirigé ce qui devrai être écrit dans la console soit écrit dans une zone de texte de l'ihm

    pour cela je te suggère de ne pas utilise 'shellexecute' mais :
    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
    //==============================================================================
    //=== Lance une application et retourne le process ID
    //==============================================================================
    Function StartAndGetProcessID(Command: String): DWord;
    Var
      lpsaProcess: PSecurityAttributes;
      lpsaThread: PSecurityAttributes;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      AddrCmd: Array[0..255] Of Char;
      ReturnValue: BOOL;
    Begin
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      With StartupInfo Do
      Begin
        cb := SizeOf(TStartupInfo);
        dwFlags := STARTF_USESHOWWINDOW;
        wShowWindow := SW_SHOW;
      End;
      New(lpsaProcess);
      New(lpsaThread);
      Try
        lpsaProcess^.nLength := SizeOf(lpsaProcess^);
        lpsaProcess^.lpSecurityDescriptor := Nil;
        lpsaProcess^.bInheritHandle := True;
     
        lpsaThread^.nLength := SizeOf(lpsaThread^);
        lpsaThread^.lpSecurityDescriptor := Nil;
        lpsaThread^.bInheritHandle := True;
     
        StrPCopy(AddrCmd, Command);
        ReturnValue := CreateProcess(Nil, AddrCmd, lpsaProcess, lpsaThread, False,
          0, Nil, Nil, StartupInfo, ProcessInfo);
      Finally
        Dispose(lpsaProcess);
        Dispose(lpsaThread);
      End;
      result := 0;
      If ReturnValue Then
      Begin
        result := ProcessInfo.dwProcessId;
        SEtThreadIdealProcessor(ProcessInfo.hThread,0);
      End;
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ProcessInfo.hProcess);
    End;//==============================================================================
    //=== Lance une application et retourne le process ID
    //==============================================================================
    Function StartAndGetProcessID(Command: String): DWord;
    Var
      lpsaProcess: PSecurityAttributes;
      lpsaThread: PSecurityAttributes;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      AddrCmd: Array[0..255] Of Char;
      ReturnValue: BOOL;
    Begin
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      With StartupInfo Do
      Begin
        cb := SizeOf(TStartupInfo);
        dwFlags := STARTF_USESHOWWINDOW;
        wShowWindow := SW_SHOW;
      End;
      New(lpsaProcess);
      New(lpsaThread);
      Try
        lpsaProcess^.nLength := SizeOf(lpsaProcess^);
        lpsaProcess^.lpSecurityDescriptor := Nil;
        lpsaProcess^.bInheritHandle := True;
     
        lpsaThread^.nLength := SizeOf(lpsaThread^);
        lpsaThread^.lpSecurityDescriptor := Nil;
        lpsaThread^.bInheritHandle := True;
     
        StrPCopy(AddrCmd, Command);
        ReturnValue := CreateProcess(Nil, AddrCmd, lpsaProcess, lpsaThread, False,
          0, Nil, Nil, StartupInfo, ProcessInfo);
      Finally
        Dispose(lpsaProcess);
        Dispose(lpsaThread);
      End;
      result := 0;
      If ReturnValue Then
      Begin
        result := ProcessInfo.dwProcessId;
        SEtThreadIdealProcessor(ProcessInfo.hThread,0);
      End;
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ProcessInfo.hProcess);
    End;
    bon ça c'est pas du fortran mais du Delphi... l'avantage de cette procedure c'est que tu recois le process ID une fois que tu as cela tu peux faire un peu ce que tu veux de ton appli.... (moi, étant donné que c un code de calcul, je faisait tracé l'utilisation CPU et mémoire de mon code)....
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    En fait, au départ j'utilisais shellexecute mais comme l'exécution est relativement longue, il faut attendre qu'elle soit terminée pour continuer la suite du programme et donc je suis passé à CreateProcess, que visiblement tu utilises aussi.
    Alors, à partir du ProcessInfo, il doit y avoir moyen de rendre la fenetre dos invisible ou minimisée ou... Sais-tu me donner une piste, j'ai déjà assez bien cherché et pas moyen! Sans doute avec windowstate ou showwindow mais pas moyen de les utiliser correctement Ou autre chose???
    Merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Ou alors peut-être l'instruction "sendmessage"???

  7. #7
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    et bé en fait j'essaye moi aussi de d'afficher ma console dans un TMemo et delphi, je doit dire que je me casse les dents....

    j'ai trouvé un truc quand le programme est cours à utiliser genre on l'exécute, et une fois fini on récupère la sortie, sauf que comme toi, mon prog peut tourner lgtps (2-3j c'est encore un petit calcul) de plus à coté de cette sortie, j'ai mis un graphique "taskmgr like" d'utilisation mem et CPU de mon code en temps réel (c'est pour ça que j'avais besoin du PID)

    cependant dans les option du startupinfo il y a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      With StartupInfo Do
      Begin
        cb := SizeOf(TStartupInfo);
        dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; 
        wShowWindow := SW_HIDE;
        hStdOutput := pipe.write;
        hStdInput := pipe.read;
      End;
    ou pipe est une variable contenant deux handle (home made)

    et d'y adjoindre (avant le create processe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreatePipe(pipe.read,pipe.write,lpsaProcess,0);
    cependant, chez moi, l'option STARTF_USESTDHANDLES fait complètement planter mon programme fortran..... or sans l'utilisation des handle pas de pipe possible.....

    donc y a une autre solution: lente: dans ton prog fortran, à chaque sortie écran, tu écris aussi ,dans un fichier texte (genre output.dat) et tu affiche le contenu de ce fichier dans ton TMemo... en le refraichissant de temps en temps... de plus "wShowWindow := SW_HIDE;" t'assure de ne pas voir la fenetre de ton noyau de calcul....
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup, ça fonctionne. Je fais effectivement ce que je veux avec la fenêtre.
    Par contre, si j'ai bien compris ce que tu fais, j'ai peut-être un tuyau pour toi. Pour attendre que l'exécutable soit terminé avant de faire une autre instruction, j'utilise waitforsingleobject. Je te donne le bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      FillChar(SI, SizeOf(TSTARTUPINFO), 0);
      With SI Do
      Begin
        cb := SizeOf(TSTARTUPINFO);
        dwFlags := STARTF_USESHOWWINDOW;
        wShowWindow := SW_SHOWMINIMIZED;
      End;
     
      CreateProcess(nil,PChar('d:\bin\win\TMOWIN\TMO_HEADER.exe'),
      nil,nil,True,0,nil,'d:\bin\win\TMOWIN',SI,ProcessInfo);
     
      WaitForSingleObject(ProcessInfo.hProcess, infinite);
    Je ne sais pas si ça t'aide, je me plante peut-être complètement?

  9. #9
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    oui, juste t'as mal compris ce que je voulais, moi juste je veux PAS attendre la fin du prog....


    voici la sortie (console) de mon prog, que je fait écrire, à la fois dans la console et dans un fichier txt (pour garder des traces)

    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
    ============================================================
     program Fox1d      version: 0.1.1      date: 08/08/2007
    22/08/2007  17:47:18
    ============================================================
     Piping Erosion version: 0.1.1     
     Final time            :  100
     Debug level           :  0
     complete storage      : FALSE
     --------------------------------------
    N      250
    !rhof             0.1000000000000000E+04
    !rhop             0.2700000000000000E+04
    !R0               0.3000000000000000E-02
    !L                0.1000000000000000E+03
    !pout             0.0000000000000000E+00
    !pin              0.3330000000000000E+07
    !fb_(ne_pas_oub   0.1000000000000000E-02
    !tauc             0.1000000000000000E+02
    !ker              0.1000000000000000E-01
    !phig             0.5000000000000000E+00
    !Nuf              0.1000000000000000E-02
    !dp               0.1000000000000000E-02
    !lm=[%]R_0.1<[%   0.1000000000000000E+00
    !precision_Rung   0.1000000000000000E-05
    !precision_Newt   0.1000000000000000E-05
    !ker2             0.1000000000000000E-01
    !tauc2            0.1000000000000000E+02
    !L1               0.2500000000000000E+02
    !L2               0.7500000000000000E+02
     
     Dense suspenssion
     Constant pressure drop
     
    U0=     0.7067531393633848D+01
    P0=     0.4995000000000000D+02
    Q0=     0.1998297423472980D-03
    pin=    0.3330000000000000D+07
    dm0=    0.3995000000000000D+00
    Running process : [....1....2....3....4....5....6....7....8....9....*] Finished
    Number or time steps   : 1445368
    Mean time step         :   0.6918681682456577D-04
    Final time             :   0.1000004110600890D+03
    number of stored steps :   10044
    Max concentration      :   0.3640971651192403D+00
    Max radius             :   0.1212255949668656D+00
    Max velocity           :   0.4268101848163147D+02
    Max flow rate          :   0.1953777573386779D+01
    CPU Time       :  4. h  18. mins  55.65625 sec
    Elapsed time   :  6. h  20. mins  24.4461999999985 sec
    comme tu peux le voir, y a 6h20mins d'exécution.... je vais pas attendre bêtement, cependant, la ligne "running process" est en fait une barre d'avancement, c'est essenciellement cela que je cherche à récupérer mais au fur et à mesure... histoire de suivre l'évolution (voir carément d'envoyé d'autre paramètres si possible)
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/07/2005, 11h58
  2. [ClassLoader]icones non visibles
    Par phil_ma dans le forum Général Java
    Réponses: 4
    Dernier message: 19/01/2005, 20h09
  3. Capture d'une form non visible
    Par Linkin dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/04/2004, 14h58
  4. Réponses: 4
    Dernier message: 07/12/2002, 15h24
  5. Form principale non visible au demarrage!!!!
    Par toufou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/07/2002, 21h49

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