PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV 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
  • Équivalence
  • Fonctionnement différent en mode GO et en utilisation réelle
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.
WINDEVWEBDEV - Code ServeurWINDEV MobileEtats et RequêtesWindows MobileJavaAjaxCode Utilisateur (MCU) 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 Notes.
  • 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.
Versions 22 et supérieures
WINDEV MobileAndroid Cette fonction est désormais disponible pour les applications Android.
WINDEV MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
Nouveauté 22
WINDEV MobileAndroid Cette fonction est désormais disponible pour les applications Android.
WINDEV MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
WINDEV MobileAndroid Cette fonction est désormais disponible pour les applications Android.
WINDEV MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
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
Versions 22 et supérieures
AndroidWidget Android
// Lancement de Google Maps
LanceAppli("com.google.android.apps.maps")
Nouveauté 22
AndroidWidget Android
// Lancement de Google Maps
LanceAppli("com.google.android.apps.maps")
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"
Versions 22 et supérieures
AndroidWidget Android Nom complet de l'application à lancer (avec le nom de package).
Exemple : pour lancer l'application Google Maps, <Nom du programme> correspond à : "com.google.android.apps.maps"
Nouveauté 22
AndroidWidget Android Nom complet de l'application à lancer (avec le nom de package).
Exemple : pour lancer l'application Google Maps, <Nom du programme> correspond à : "com.google.android.apps.maps"
AndroidWidget Android Nom complet de l'application à lancer (avec le nom de package).
Exemple : pour lancer l'application Google Maps, <Nom du programme> correspond à : "com.google.android.apps.maps"
<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 AndroidWindows MobileJava 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.
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 ServeurWINDEV MobileEtats et RequêtesWindowsLinuxWindows MobileJavaAjaxCode Utilisateur (MCU)

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é
Windows Mobile Cette constante n'est pas disponible.
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 :
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.
Java Cette constante n'est pas disponible.
<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.
WINDEVWEBDEV - Code ServeurWINDEV MobileEtats et RequêtesWindowsLinuxWindows MobileJavaAjaxCode Utilisateur (MCU)

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 bouton (éventuel) dont le traitement contient un appel de la fonction LanceAppli ne doit pas être "Tab Stop" (option "Accessible par TAB" dans l'onglet "Détail" de la description du champ).
WINDEVWEBDEV - Code ServeurWINDEV MobileEtats et RequêtesWindowsLinuxWindows MobileJavaAjaxCode Utilisateur (MCU)

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êtesWindowsAjaxCode Utilisateur (MCU)

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 ServeurWINDEV MobileEtats et RequêtesWindowsLinuxWindows MobileJavaAjaxCode Utilisateur (MCU)

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.
WINDEV MobileWindows Mobile

Équivalence

Le fonctionnement de la fonction LanceAppli est équivalent au fonctionnement de la fonction ceLanceAppli.
Seule différence :
  • la fonction ceLanceAppli lance un programme sur le Pocket PC à partir d'une application WINDEV standard.
  • la fonction LanceAppli lance un programme sur le Pocket PC à partir d'une application WINDEV Mobile.
WINDEV MobileWindows Mobile

Fonctionnement différent en mode GO et en utilisation réelle

En mode GO (simulation sur le poste de développement), l'application à lancer doit être présente sur le poste PC de développement.
En utilisation réelle, l'application à lancer doit être présente sur le Pocket PC.
L'ensemble des différences entre le mode GO (simulateur) et l'utilisation réelle est détaillé dans Différences en mode GO et en utilisation réelle.
Composantes
WINDEVWEBDEV - Code ServeurEtats et Requêtes wd230std.dll
Windows Mobile wp230std.dll
Java wd230java.jar
Linux wd230std.so
Android wd230android.jar
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