PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Utilisation d'une ligne de commande
  • Utilisation de la constante exeActif
  • Valeur de retour d'un exécutable WINDEV
  • Lancement d'application en code serveur WEBDEV
  • Lancement d'une application sous Windows Vista (et supérieur)
  • Divers
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Lance l'exécution d'un programme (exécutable par exemple) depuis l'application en cours.
WEBDEV - Code ServeurAjax Il est possible de récupérer :
  • la valeur de retour de l'exécutable avec la constante exeValeurRetour.
  • l'identificateur du processus, appelé également PID avec la constante exePID.
WEBDEV - Code Serveur Remarques :
  • A partir de Windows Vista, le lancement d'applications peut échouer si le mécanisme de l'UAC est activé. Pour plus de détails, consultez les remarques.
  • Sous Windows 64 bits, l'accès à un répertoire système à partir d'un exécutable 32 bits peut ne pas se faire dans le répertoire attendu. Pour plus de détails, consultez la page d'aide 64 bits natif et 32 bits natif.
Exemple
WEBDEV - Code Serveur
// Lancement du bloc-notes avec le mode par défaut
LanceAppli("NOTEPAD.EXE Lisezmoi.txt")
WEBDEV - Code Serveur
// Lancement d'un programme avec un nom long comprenant des espaces
// Par exemple : Word avec "Mes documents" pour répertoire de travail

// Solution 1 : Utilisation de la syntaxe spécifique des chaînes multilignes
// (évite de doubler ou tripler les guillemets)
SI LanceAppli([
"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE"
], ...
exeActif, exeNonBloquant, SysRep(srMesDocuments)) = Faux ALORS
Erreur(ErreurInfo())
FIN

// Solution 2 : Doublement des guillemets
LanceAppli("""C:\Program Files\Microsoft Office\Office12\WINWORD.EXE""", ...
exeActif, exeNonBloquant, SysRep(srMesDocuments))
WEBDEV - Code Serveur
// Lancement d'applications avec un fichier en ligne de commande
// Nom de l'application à lancer
sNomAppli est une chaîne = "C:\Program Files\Adobe\Photoshop 6.0\Photoshp.exe"
// Nom de l'image à ouvrir
sNomImage est une chaîne = "C:\Users\Mon Nom\Pictures\Photos Immeubles\IMGP0993.JPG"

// Lancement équivalent à "Démarrer Exécuter"
// Il faut obtenir une chaîne de caractères contenant des "" du type :
// "C:\Program Files\Adobe\Photoshop 6.0\Photoshp.exe"
// "C:\Users\Mon Nom\Pictures\Photos Immeubles\IMGP0993.JPG"
SI LanceAppli(ChaîneConstruit([
"%1" "%2"
], sNomAppli, sNomImage)) = Faux ALORS
Erreur(ErreurInfo())
FIN
Syntaxe

Lancer un exécutable (en mode bloquant ou non bloquant) Masquer les détails

<Résultat> = LanceAppli(<Nom du programme> [, <Mode> [, <Attente fin> [, <Répertoire de travail>]]])
<Résultat> : Booléen
  • Vrai si le programme a été lancé,
  • Faux dans le cas contraire. La fonction ErreurInfo permet d'obtenir plus de détails sur l'erreur.
PHP Cette fonction ne renvoie pas de résultat.
<Nom du programme> : Chaîne de caractères
Nom du programme à lancer avec si nécessaire son chemin et/ou les paramètres à passer au programme.
  • Si aucun chemin n'est précisé, le programme est recherché tout d'abord dans le répertoire en cours, puis dans le répertoire de Windows et dans les répertoires accessibles par le PATH.
  • Si l'exécutable correspond à un nom long avec espaces, il est nécessaire d'utiliser la syntaxe suivante :
    <Nom du programme> = " " " Nom_Long_avec_espaces" " Ligne_commande"
<Mode> : Constante optionnelle de type entier
Mode de lancement du programme (aucune action sur les programmes DOS).
exeActif
(Valeur par défaut)
Le programme lancé est actif, il s'exécute en "prenant la main" sur le programme en cours.
exeIconiseLe programme lancé est inactif et s'exécute icônisé.
exeInactifLe programme lancé est inactif : il s'exécute alors que le programme en cours garde le focus.
exeMaximiseLe programme lancé est actif, il s'exécute en "prenant la main" sur le programme en cours (la fenêtre d'exécution a la taille maximale autorisée).
PHP Ce paramètre n'est pas disponible.
<Attente fin> : Constante de type Booléen optionnelle
Paramètre le délai nécessaire à la reprise de l'exécution du programme en cours :
exeBloquantLe programme en cours reprend son exécution lorsque le programme lancé est terminé.
exeNonBloquant
(Valeur par défaut)
Le programme en cours et le programme lancé s'exécutent en parallèle.
PHP Ce paramètre n'est pas disponible.
<Répertoire de travail> : Chaîne de caractères optionnelle
Répertoire de travail de l'application à lancer.
PHP Ce paramètre n'est pas disponible.
WEBDEV - Code ServeurWindowsLinuxAjax

Lancer un programme et récupérer une valeur Masquer les détails

<Résultat> = LanceAppli(<Nom du programme> [, <Mode> [, <Elément à renvoyer> [, <Répertoire de travail>]]])
<Résultat> : Entier
Valeur recherchée :
  • Valeur de retour de l'exécutable si <Elément à renvoyer> correspond à la constante exeValeurRetour.
  • PID de l'exécutable si <Elément à renvoyer> correspond à la constante exePID.
La fonction ErreurInfo permet de savoir si une erreur a été rencontrée.
<Nom du programme> : Chaîne de caractères
Nom du programme à lancer avec si nécessaire son chemin et/ou les paramètres à passer au programme.
  • Si aucun chemin n'est précisé, le programme est recherché tout d'abord dans le répertoire en cours, puis dans le répertoire de Windows et dans les répertoires accessibles par le PATH.
  • Si l'exécutable correspond à un nom long avec espaces, il est nécessaire d'utiliser la syntaxe suivante :
    <Nom du programme> = " " " Nom_Long_avec_espaces" " Ligne_commande"
<Mode> : Constante optionnelle de type entier
Mode de lancement du programme (aucune action sur les programmes DOS).
exeActif
(Valeur par défaut)
Le programme lancé est actif, il s'exécute en "prenant la main" sur le programme en cours
exeIconiseLe programme lancé est inactif et s'exécute iconisé
exeInactifLe programme lancé est inactif : il s'exécute alors que le programme en cours garde le focus
exeMaximiseLe programme lancé est actif, il s'exécute en "prenant la main" sur le programme en cours (la fenêtre d'exécution a la taille maximale autorisée)
<Elément à renvoyer> : Constante optionnelle
Paramètre le résultat de la fonction :
exeValeurRetourLe programme en cours reprend son exécution lorsque le programme lancé est terminé. <Résultat> correspond à la valeur de retour de l'exécutable.
exePIDLe programme en cours et le programme lancé s'exécutent en parallèle. <Résultat> correspond à l'identificateur du processus créé (également appelé PID) de l'exécutable, si celui-ci a été lancé, 0 en cas d'échec.
Cet identificateur peut être utilisé par exemple dans certaines API.
<Répertoire de travail> : Chaîne de caractères optionnelle
Répertoire de travail de l'application à lancer.
Remarques

Utilisation d'une ligne de commande

Pour passer des paramètres en ligne de commande à l'exécutable lancé, il est nécessaire de spécifier le chemin complet et le nom de l'exécutable à lancer.
Si le programme lancé est réalisé avec WINDEV, il sera possible de récupérer la ligne de commande avec la fonction LigneCommande.
WEBDEV - Code ServeurWindowsLinuxAjax

Utilisation de la constante exeActif

Si le traitement dans lequel l'application est lancée (avec la constante exeActif) exécute un code permettant au programme appelant de reprendre le focus, le programme appelé perd la main.
Pour que le programme appelé conserve le focus, il ne faut pas :
  • appeler une autre fenêtre ou boîte de dialogue après l'appel de la fonction LanceAppli,
  • appeler la fonction RepriseSaisie après la fonction LanceAppli.
De plus, le champ Bouton (éventuel) dont l'événement "Clic" associé contient un appel de la fonction LanceAppli ne doit pas être "Tab Stop" (option "Accessible par TAB" dans l'onglet "IHM" de la description du champ).
WEBDEV - Code ServeurWindowsLinuxAjax

Valeur de retour d'un exécutable WINDEV

Un exécutable WINDEV peut renvoyer une valeur de retour. Il suffit de :
  1. Créer une variable globale au projet de type Entier.
  2. Initialiser cette variable avec la valeur à renvoyer.
  3. Renvoyer cette variable avec le mot-clé RENVOYER dans le code de fermeture du projet.
WEBDEV - Code ServeurAjax

Lancement d'application en code serveur WEBDEV

La fonction LanceAppli s'exécute sur le serveur, c'est donc sur le serveur que l'application lancée est exécutée.
Par défaut, l'application est visible uniquement dans le gestionnaire de tâches, car le lancement est effectué depuis un service qui n'a pas d'interaction avec le bureau Windows.
Pour que le programme lancé soit visible sur le serveur, il faut cocher l'option "Autoriser le service à interagir avec le bureau" dans les propriétés du service WEBDEV.
WEBDEV - Code ServeurWindowsAjax

Lancement d'une application sous Windows Vista (et supérieur)

Si le mécanisme de l'UAC (contrôle des comptes utilisateurs) est activé, l'application qui utilise la fonction LanceAppli pour lancer une autre application doit avoir des droits supérieurs à l'application qui est lancée.
Par exemple, une première application lancée avec les droits administrateur peut lancer une seconde application qui ne nécessite pas de droits spécifiques.
Si la seconde application nécessite plus de droits que l'application qui la lance, il est possible que la seconde application ne se lance pas. Windows propose alors d'activer la gestion de la compatibilité avec Windows Vista. Si la gestion de la compatibilité est activée, la seconde application sera exécutée à son prochain lancement. Il est également possible d'utiliser la fonction LanceAppliAssociée.
WEBDEV - Code ServeurWindowsLinuxAjax

Divers

  • La fonction LanceAppli ne modifie pas le répertoire en cours. Le répertoire en cours avant l'exécution de la fonction LanceAppli est identique au répertoire en cours après l'exécution de la fonction LanceAppli.
  • Si le programme lancé ne prend pas en compte le mode d'exécution spécifié, le programme est lancé par défaut en mode exeActif.
Composante : wd240std.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
UAC : Lancer un programme nécessitant plus de droits
Si on essaie d'ouvrir un programme nécessitant les droits administrateur depuis une application ne les ayants pas avec LanceAppli() il ne se passe rien, l'UAC ne demande même pas à l'utilisateur s'il veut donner les droits.

Pour parer à ça il faut utiliser LanceAppliAssociée() à la place qui utilise l'API ShellExecute de Windows alors que LanceAppli() utilise l'API CreateProcess qui échoura si le processus demande des droits d'admin.

Plus d'info sur : http://technet.microsoft.com/fr-fr/library/dd835540(v=ws.10).aspx
Paul
18 juil. 2013
Appli Win32 non valide
Sur les systèmes Windows Vista/7, il arrive que l'on ai une erreur type "Impossible d'ouvrir l'application ..., Application win32 non valide".

Remplacer
LanceAppli(sMonAppli,<options>)
par
LanceAppli(fCheminCourt(sMonAppli),<options>)
Nicolas I.
19 mar. 2012