DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion de Windows / Fonctions Exécutables
  • 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
  • Application en arrière-plan : Spécificité à partir de Android 10
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Lance l'exécution d'un programme (exécutable par exemple) depuis l'application en cours.
WINDEVWEBDEV - Code ServeurEtats et RequêtesJavaCode Utilisateur (MCU)Ajax 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.
WINDEVWEBDEV - 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
WINDEVWEBDEV - Code Serveur
// Lancement du bloc-notes avec le mode par défaut
LanceAppli("NOTEPAD.EXE Lisezmoi.txt")
WINDEVWEBDEV - 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))
WINDEVWEBDEV - 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
AndroidWidget Android
// Lancement de Google Maps
LanceAppli("com.google.android.apps.maps")
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"
AndroidWidget Android Nom complet de l'application à lancer (avec le nom de package) avec si nécessaire les paramètres à passer au programme.
  • Exemple : pour lancer l'application Google Maps, <Nom du programme> correspond à : "com.google.android.apps.maps".
  • Pour spécifier des paramètres à passer en ligne de commande, il suffit d'utiliser la notation suivante :
    <Nom du programme> = <Nom du package> <Nom paramètre 1> = <Valeur paramètre 1>
A partir de Android 11, le nom du package doit être ajouté dans le manifeste de l'application. Une illustration est donnée dans la FAQ suivante : Comment autoriser le lancement d'une autre application avec LanceAppli à partir d'une application sous Android 11 ?
<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é.
AndroidWidget AndroidJava Cette constante n'est pas disponible.
exeInactifLe programme lancé est inactif : il s'exécute alors que le programme en cours garde le focus.
AndroidWidget AndroidJava Cette constante n'est pas disponible.
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).
AndroidWidget AndroidJava Cette constante n'est pas disponible.
exeSansHéritageHandlePermet d'indiquer que l'exécutable ne doit pas hériter des "Handles" du parent (attention, s'applique à TOUS les handles, fichiers compris). L'exécutable est indépendant de l'application qui le lance.
Cette constante peut être combinée avec les autres constantes de mode de lancement de l'application.
AndroidWidget AndroidJava Cette constante n'est pas disponible.
PHP Ce paramètre n'est pas disponible.
AndroidWidget AndroidJava Le programme lancé est toujours actif : il s'exécute en "prenant la main" sur le programme en cours.
<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é.
AndroidWidget Android L'application peut être lancé en mode non bloquant uniquement. Une erreur fatale est affichée si la constante exeBloquant est utilisée.
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.
AndroidWidget AndroidPHP Ce paramètre n'est pas disponible.
WINDEVWEBDEV - Code ServeurEtats et RequêtesWindowsLinuxJavaCode Utilisateur (MCU)Ajax

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)
Java Ce paramètre est ignoré. Le programme lancé est actif, il s'exécute en "prenant la main" sur le programme en cours.
<Elément à renvoyer> : Constante optionnelle
Paramètre le résultat de la fonction :
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.
Java Cette constante n'est pas disponible.
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.
<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.
WINDEVAndroid Si le programme lancé est réalisé avec WINDEV ou WINDEV Mobile, il sera possible de récupérer la ligne de commande avec la fonction LigneCommande.
WINDEVWEBDEV - Code ServeurEtats et RequêtesWindowsLinuxJavaCode Utilisateur (MCU)Ajax

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 DonneFocusEtRetourUtilisateur 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 "UI" de la description du champ).
WINDEVWEBDEV - Code ServeurEtats et RequêtesWindowsLinuxJavaCode Utilisateur (MCU)Ajax

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.
WINDEVWEBDEV - Code ServeurEtats et RequêtesWindowsCode Utilisateur (MCU)Ajax

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.
WINDEVWEBDEV - Code ServeurEtats et RequêtesWindowsLinuxJavaCode Utilisateur (MCU)Ajax

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.
AndroidWidget Android

Application en arrière-plan : Spécificité à partir de Android 10

A partir de Android 10, il n'est plus possible d'ouvrir une fenêtre lorsque l'application est en arrière-plan.
La fonction LanceAppli peut provoquer l'ouverture d'une fenêtre. Si cette fonction est utilisée alors que l'application est en arrière-plan, une erreur fatale sera générée.
Conseils :
  • Il est possible de savoir si l'application est en arrière-plan grâce à la fonction EnModeArrièrePlan.
  • Si une application a besoin d'interagir avec l'utilisateur alors qu'elle se trouve en arrière-plan, la solution consiste à afficher une notification (via le type Notification). Lors du clic sur la notification, l'application sera remise au premier plan si la propriété ActiveApplication est à Vrai. Il est également possible d'ouvrir une fenêtre depuis la procédure passée à la propriété ActionClic.
Composante : wd300std.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Du bon usage du paramètre «Répertoire de travail»
Le paramètre «Répertoire de travail» est utilisé pour définir le dossier en cours du nouveau processus, une fois que celui-ci est crée, avant d'être exécuté.

Le paramètre «Répertoire de travail» ne sert pas à localiser l'emplacement du fichier exécutable renseigné dans le paramètre «Nom du programme».

Si le programme à exécuter n'est pas préfixé par un chemin qui désigne son emplacement, alors Windows effectue une recherche (dossier en cours, dossier système, dossiers de la variable d'environnement PATH...).
Le paramètre «Répertoire de travail» n'est pas pris en compte pour cette recherche.
=JBO=
11 déc. 2020
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

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale