FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Cacher la barre des tâches
par Klaus Aujourd'hui à 8:41

» quel est ce comportement de Panoramic_editor
par Oscaribout Aujourd'hui à 0:22

» Des FORM(s) Colorés
par Jean Claude Hier à 20:58

» Recherches dans un fichier texte
par JL35 Hier à 20:18

» Problème d'affichage des pages du forum (Résolu)
par Jean Claude Hier à 20:00

» Une "base de connaissance" - pour jouer ou plus si affinité
par Klaus Hier à 19:10

» Objet 3D_PLANE, réalisation d'un dé en 3D
par papydall Hier à 13:54

» Créer une application *.exe
par Yannick Ven 18 Mai 2018 - 20:01

» [RÉSOLU] Priorité affichage des objets : comment la définir?
par papydall Ven 18 Mai 2018 - 18:22

» Aucune différence entre ON_CLICK et ON_DOUBLE_CLICK
par Jean Claude Jeu 17 Mai 2018 - 8:37

» [Résolu] Récuperer les fonctions systeme de Panoramic
par Minibug Mar 15 Mai 2018 - 23:21

» Est-ce qu'un fichier est inclus dans l'application ?
par Yannick Mar 15 Mai 2018 - 12:04

» Création d'une application avec Panoramic_Editor
par Klaus Mar 15 Mai 2018 - 0:36

» Pour faire patienter
par Minibug Lun 14 Mai 2018 - 21:25

» Une copie de Panoramic Editeur
par Minibug Lun 14 Mai 2018 - 19:55

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2018
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Wordpad

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Wordpad   Dim 29 Avr 2018 - 10:40

Code:
DIM wpd$
wpd$ = "C:\Windows\System32\write.exe": ' Wordpad
EXECUTE_WAIT wpd$
TERMINATE
Pourquoi est-ce que l'on sort tout de suite de l'Execute_Wait, sans attendre la fermeture de write.exe ??
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 11:01

Je ne vois qu'une explication: c'est un bug.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 11:11

Bonjour Klaus, tu me rassures (si on peut dire), et là je m'absente pour la journée.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 614
Age : 45
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 12:40

Je viens d'essayer, c'est plutôt subtil, 'execute_wait' attend bien la fin du fichier, mais seulement si c'est une application panoramic! Même chose avec une version plus ancienne(0927i5) Neutral
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5905
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 13:15

Remplacer le TERMINATE par END.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 13:37

Citation :
Remplacer le TERMINATE par END.
Ben... non, Papydall ! Si JL35 a mis un TERMINATE à la fin, c'est justement pour mettre le problème en évidence, avec peu de lignes. Ce qui est clair, c'est que Panoramic, contrairement à ce que laisse entendre le mot-clé et à ce que dit la doc:
Citation :
La commande EXECUTE_WAIT F exécute le fichier F et attend la fin.
Donc, en toute logique, lors de l'exécution de la commande Panoramic suivante, on doit être assuré que le programme lancé a été terminé. Sinon, il n'y a aucune différence avec la commande EXECUTE. D'ailleurs, facile à vérifier: place une commande MESSAGE après EXECUTE_WAIT, et tu verras que le message vient alors que le programme lancé est toujours actif.

C'est bien un bug.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Navigateur

avatar

Nombre de messages : 6
Age : 69
Localisation : Les Clayes-sous-bois 78340
Date d'inscription : 02/09/2016

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 16:04

Bonjour,

Le problème vient du fait que le nom de la tâche de "write.exe" une fois lancé est "wordpad.exe"
Comme a priori EXECUTE_WAIT recherche une tâche  dont le nom correspond au nom qu'on lui a transmis, soit "write.exe", il suppose qu'elle est (déjà) terminée et revient aussitôt.

Pour le vérifier, copier c:\windows\system32\write.exe dans votre répertoire courant et renommer le en wordpad.exe
et exécuter le programme suivant :

wpd$ = "wordpad.exe"
EXECUTE_WAIT wpd$
terminate

Maintenant, la fenêtre Panoramic reste ouverte tant que wordpad n'est pas fermé.

Navigateur


PS : vous pouvez utiliser la commande tasklist  /fi "imagename eq  nom_image" pour voir si nom_image est en cours d'exécution.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 16:58

Dans ce cas, il suffira de créer un petit fichier BAT qui, lui, va lancer WRITE.exe. Et on lance de fichier BAT avec EXECUTE_WAIT. Ca devrait résoudre le problème.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 18:31

Merci Navigateur, tu as mis le doigt dessus, c'est que c'est un cas particulier de nom... et donc ce n'est pas un bug.
(je lance write.exe et dans tasklist j'ai wordpad.exe actif)
Et connaissant le problème, la solution est facile à imaginer.
Merci à tous pour vos remarques.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 19:11

Ce n'est peut-être pas aussi simple que ce que je pensais...

@Klaus: le fait de passer par un fichier .bat ne change rien, ça rend la main tout de suite.

Si après l'Execute_Wait je fais une boucle temporisée avec examen de tasklist (pour voir si wordpad.exe est présent),
du genre:
Code:
 EXECUTE_WAIT wpd$: ' write.exe
 a$ = "wordpad.exe"
 WHILE INSTR(a$,"wordpad.exe") > 0
    PAUSE 200
    EXECUTE_WAIT "cmd.exe /c tasklist.exe | clip": a$ = CLIPBOARD_STRING_PASTE$
 END_WHILE
ça marche, mais ça fait apparaître une fenêtre noire à chaque passage dans la boucle... très inesthétique !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 19:16

Comment lances-tu le fichier BAT ? Car, en tout état de cause, le programme lancé doit être CMD.exe.Il faut peut-être ajouter la commande PAUSE à la fin du fichier. Si tu lances CMD avec l'option /C puis le nom du fichier BAT, le seul processus lancé par Panoramic sera alors CMD.exe et il reste actif tant que PAUSE n'est pas validé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Dim 29 Avr 2018 - 19:35

Je lance le bat comme d'habitude: cmd.exe /c xxx.bat, il me rend la main tout de suite.

J'ai essayé autre chose, un peu lourd et sans doute pas très élégant, mais ça marche et je n'ai pas trouvé mieux: supprimer l'apparition de la fenêtre noire à chaque boucle en passant par un script vbs (les chemins de fichiers sont à adapter):
Code:
DIM wpd$,wba$,vb$,q$,a$
wpd$ = "C:\Windows\System32\write.exe"
wba$ = "Z:\word.bat"
vb$ = "Z:\vb.vbs"
q$ = CHR$(34)

EXECUTE_WAIT wpd$: ' -> Z:\Document.rtf
FILE_OPEN_WRITE 1,wba$: ' .BAT, provisoire
    FILE_WRITELN 1,"@echo off"
    FILE_WRITELN 1,"tasklist.exe | clip"
FILE_CLOSE 1
FILE_OPEN_WRITE 1,vb$: ' script vbs, provisoire
    FILE_WRITELN 1,"CreateObject("+q$+"Wscript.Shell"+q$+").Run "+q$+wba$+q$+",0,True"
FILE_CLOSE 1
a$ = "wordpad.exe"
WHILE INSTR(a$,"wordpad.exe") > 0
    PAUSE 200
    EXECUTE_WAIT "WSCRIPT.exe "+vb$: a$ = CLIPBOARD_STRING_PASTE$
END_WHILE
DELETE wba$: DELETE vb$
stop
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 614
Age : 45
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 0:04

Je procède de cette manière pour mon projet, mais je ne sais pas si ça va aller pour le tien:
Code:
DIM wpd$
wpd$ = "C:\Windows\System32\write.exe": ' Wordpad
EXECUTE_WAIT wpd$: ' write.exe

repeat : until handle_form("Document - WordPad")>0 :' attendre le démarrage de wordpad
WHILE handle_form("Document - WordPad") > 0 : END_WHILE :' attendre la cloture de wordpad
print "Worpad arrêté"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 2:04

Voici une façon "propre" de lancer Write.exe (ou n'importe quoi d'autre...), en attendant la fiin du programme lancé et sans fenêtre DOS noire:
Code:
DIM wpd$
wpd$ = "C:\Windows\System32\write.exe": ' Wordpad
file_open_write 1,"wpd.bat"
file_writeln 1,"echo off"
file_writeln 1,"start "+wpd$
file_writeln 1,":WAITLOOP"
file_writeln 1,"tasklist /FI "+chr$(34)+"IMAGENAME eq wordpad.exe"+chr$(34)+" 2>NUL | find /I /N "+chr$(34)+"wordpad.exe"+chr$(34)+">NUL"
file_writeln 1,"if "+chr$(34)+"%ERRORLEVEL%"+chr$(34)+"=="+chr$(34)+"0"+chr$(34)+" goto RUNNING"
file_writeln 1,"goto NOTRUNNING"

file_writeln 1,":RUNNING"
file_writeln 1,"ping"
file_writeln 1,"goto WAITLOOP"

file_writeln 1,":NOTRUNNING"
file_close 1

file_open_write 1,"wpd.vbs"
file_writeln 1,"CreateObject("+chr$(34)+"Wscript.Shell"+chr$(34)+").Run "+chr$(34)+"wpd.bat"+chr$(34)+",0,True"
file_close 1

EXECUTE_WAIT "wpd.vbs"
file_delete "wpd.bat"
file_delete "wpd.vbs"
TERMINATE                                            

Exercice:
transformer cela en une SUB du genre ExecuteAndWait(prog$)...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 9:46

@silverman
Merci pour la méthode, élégante, succincte, et qui marche parfaitement chez moi (mais il fallait y penser, pas évident) !

Mais je vais me faire également une Sub avec la méthode Klaus, qui a l'avantage d'être universelle et de supprimer cette fichue fenêtre noire intempestive pour les autres cas.

En tout cas, merci à tous les deux.

PS ça marche Klaus, mais j'ai quand même la fenêtre noire d'exécution de Cscript.exe...
Finalement, et comme le problème est très particulier et ne se pose a priori qu'avec write.exe (qui est enregistré comme wordpad à l'exécution), je vais utiliser la méthode silverman efficace et peu encombrante (j'ai simplement ajouté une Pause de 300 dans le While/End_While pour que ça ne mouline pas trop vite).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2833
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 10:16

Et pourquoi ne pas appeler directement WORDPAD comme le suggérait Navigateur ?

Code:

wpd$ = "wordpad.exe"
EXECUTE_WAIT wpd$
terminate

J'ai testé et ça marche très bien !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 10:16

Citation :
j'ai quand même la fenêtre noire d'exécution de Cscript.exe...
C'est WScript, pas CScript... et je n'ai aucune fenêtre noire. Il ne peut pas y en avoir, avec cette technique.

Je fais faire une SUB autonome qui va gérer tous les cas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 10:19

Ben... oui, Minibug, tu as raison ! Ca marche ! Mais pourquoi est-on allé chercher midi à 14 heures ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11080
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 10:42

Juste pour le plaisir: le code suivant est la conversion en SUB de ma solution ci-dessus, en tenant compte de la remarque de Minibug concernant le nom du fichier.
Code:
' lancer_wordpad_et_attendre.bas

DIM wpd$
wpd$ = "wordpad.exe": ' Wordpad
ExecuteAndWait(wpd$)
terminate

sub ExecuteAndWait(prog$)
  file_open_write 1,"temp.bat"
  file_writeln 1,"echo off"
  file_writeln 1,"start "+prog$
  file_writeln 1,":WAITLOOP"
  file_writeln 1,"tasklist /FI "+chr$(34)+"IMAGENAME eq "+prog$+chr$(34)+" 2>NUL | find /I /N "+chr$(34)+prog$+chr$(34)+">NUL"
  file_writeln 1,"if "+chr$(34)+"%ERRORLEVEL%"+chr$(34)+"=="+chr$(34)+"0"+chr$(34)+" goto RUNNING"
  file_writeln 1,"goto NOTRUNNING"

  file_writeln 1,":RUNNING"
  file_writeln 1,"ping"
  file_writeln 1,"goto WAITLOOP"

  file_writeln 1,":NOTRUNNING"
  file_close 1

  file_open_write 1,"temp.vbs"
  file_writeln 1,"CreateObject("+chr$(34)+"Wscript.Shell"+chr$(34)+").Run "+chr$(34)+"temp.bat"+chr$(34)+",0,True"
  file_close 1

  EXECUTE_WAIT "temp.vbs"
  file_delete "temp.bat"
  file_delete "temp.vbs"
end_sub
Cette sub pourra être aisément adapté au cas où le programme à exécuter serait dans un autre dossier, via FILE_EXTRACT_NAME pour récupérer le nom de l'EXE pour les tests dans le fichier vbs.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6255
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 12:17

Et finalement, concernant write.exe, j'avais dû me dire sans doute "Poujrquoi faire simple quand on peut faire compliqué ?"
Alors que la solution était toute simple, comme l'a fait remarquer Navigateur, et il n'est même pas besoin de recopier write.exe dans le répertoire courant, ça marche directement comme ceci:
Code:
EXECUTE_WAIT "Wordpad.exe"
Et c'est tout !
Que de temps perdu pour rien...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Navigateur

avatar

Nombre de messages : 6
Age : 69
Localisation : Les Clayes-sous-bois 78340
Date d'inscription : 02/09/2016

MessageSujet: Re: Wordpad   Lun 30 Avr 2018 - 13:07

Bonjour,

@ JL35, copier le programme avec son "vrai" nom, c'est la solution la plus simple, si on veut bien créer une copie, pas exemple s'elle n'est pas trop volumineuse.

En fait, j'ai regardé ce problème dans le cadre de mon apprentissage de Panobasic. Merci à klaus pour ses interventions/solutions qui m'ont permis de réviser mes connaissances sur les commandes des fichiers batch.

Et pour continuer d'alimenter ce sujet (ce n'est pas une perte de temps !) et comme exercice d'utilisation des FNC, j'ai essayé de trouver une solution sans passer par l'étape vbs.

Code :
Code:
DIM wpd1$, wpd2$
DIM cmd$, qu$, sp$

qu$   = chr$(34)
sp$   = " "
wpd1$ = "c:\windows\system32\write.exe" : ' Write
wpd2$ = "wordpad.exe"                   : ' Write alias

Running_Test_bat_Make()
EXECUTE_WAIT2(wpd1$, wpd2$)
TERMINATE  


FNC EXECUTE_WAIT2(file_id$, file_alias$)
    cmd$ = "Running_Test.bat | " + file_id$ + sp$ + file_alias$
    EXECUTE_WAIT cmd$
END_FNC


FNC Running_Test_bat_Make()
  cmd$ = "FOR /F %%x IN ('tasklist /NH /FI " + qu$ + "IMAGENAME eq %EXE2%" + qu$ + "') DO IF /I %%x NEQ %EXE2% exit /B"
  file_open_write 1,"Running_Test.bat"
  file_writeln    1, "@echo off"
  file_writeln    1, "set EXE1=%1"
  file_writeln    1, "set EXE2=%2"
  file_writeln    1, "%EXE1%"
  file_writeln    1, ":Running_Test"
  file_writeln    1, "timeout /T 1 /NOBREAK >nul"
  file_writeln    1, cmd$
  file_writeln    1, "goto Running_Test"
  file_close      1  
END_FNC

Navigateur

PS : si on a créé une fois pour toute "Running_Test.bat", on peut supprimer la FNC correspondante et son appel
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Wordpad   

Revenir en haut Aller en bas
 
Wordpad
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» problème de convertion de fichier txt ou log vers GPX

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: