WDForge - Forum

Le forum des développeurs professionnels WinDev ®

Application externe

Discussion sur WinDev®

Message non lupar bruno » Mar 26 Jan 2016 11:08

Bonjour à tous,

je suis un peu débutant et j'ai une application que j'aimerai connecter à une autre non développée en WinDev, ce logiciel externe est SweetLight qui permet la gestion de la lumière pour un spectacle, évènement ... il existe une fonction dans ce programme qui permet d'utiliser un réseau local sur le même poste

adresse : 127.0.0.1
port : 7348
mot de passe : 1234 (facultatif)

j'ai donc fait :

Code: Tout sélectionner
LanceAppli("C:\Program Files (X86)\SweetLight\TheLightingController.exe",exeActif,Faux)
SI SocketConnecte("SweetLight",7348,"127.0.0.1") =Vrai ALORS
   envoietouche("A) // pour déclencher la séquence lumière par ce bouton
SINON
   Info("Non")
FIN


cela ne marche pas, j'ai réussi une autre solution, en récupérant le handle de sweetlight et celui de mon application WinDev et en donnant le focus à sweetlight, en envoyant la touche clavier puis en redonnant le focus à l'application WinDev. Cette façon de faire marche mais le soucis est que sweetlight en reprenant le focus flash un court instant sur l'écran. J'aimerai savoir comment envoyer le raccourci clavier à ce logiciel de lumière sans avoir besoin de lui redonner le focus, si quelqu'un à une idée je l'en remercie d'avance.
Bonne journée.
Bruno
bruno
Stagiaire WDF
 
Messages: 4
Enregistré le: Mar 26 Jan 2016 10:51

Message non lupar R&B » Sam 30 Jan 2016 12:22

Bonjour

Le passage d'une touche à une autre application utilise bien le Handle de cette dernière.
Toutefois, mieux qu'un LanceAppli qui va la démarrer, je vous invite à simplement vérifier sa présence dans les processus tout en récupérant son PID qui servira alors à lui envoyer les touches...
Code: Tout sélectionner
lc_Processus est une chaîne = ExeListeProcessus(exeNomLong,exePID)
lc_Appli est une chaîne
lc_Nom est une chaîne
ln_PID est un entier
// Parcours les processus en cours
POUR TOUTE CHAÎNE lc_appli DE lc_processus SEPAREE PAR RC
   lc_nom = ExtraitChaîne(lc_appli,1)
   SI lc_Nom = "C:\Program Files (X86)\SweetLight\TheLightingController.exe" ALORS
      ln_PID = Val(ExtraitChaîne(lc_appli,2))
      SORTIR
   FIN
FIN
// Pas d'application, pas de touche...
SI ln_pid=0 ALORS
   Erreur("Application non lancée")
   RETOUR
FIN

// Envoie la touche à l'application
EnvoieTouche("A",ln_pid)


Ce code n'a pas été exécuté mais devrait vous servir de base de départ.
R&B
Administrateur WDForge
 
Messages: 31
Enregistré le: Jeu 5 Mar 2015 23:21

Message non lupar bruno » Sam 30 Jan 2016 12:24

Merci pour cette réponse, j'ai eu entre temps une communication avec l'éditeur sweetlight qui m'a fourni une procédure que j'ai pu adapté en langage WinDev et tout fonctionne parfaitement .

Merci encore pour votre réponse.
Bruno
bruno
Stagiaire WDF
 
Messages: 4
Enregistré le: Mar 26 Jan 2016 10:51

Message non lupar bruno » Dim 31 Jan 2016 15:39

Bonjour R&B ,

Je me suis penché sur votre code car il pourrait être intéressant pour une autre application, je l'ai essayé sur sweetlight pour voir mais même si ce programme est lancé un message me fait part qu'il ne l'ai pas, alors j'ai ajouté ceci :

Code: Tout sélectionner
NbLance est un entier
NbLance = ExeLancé("C:\Program Files (X86)\SweetLight\TheLightingController.exe")
SI NbLance > 0 ALORS
   Info("Vous utilisez sweetlight !")
   lc_Processus est une chaîne = ExeListeProcessus(exeNomLong,exePID)
   lc_Appli est une chaîne
   lc_Nom est une chaîne
   ln_PID est un entier
   // Parcours les processus en cours
   POUR TOUTE CHAÎNE lc_Appli DE lc_Processus SEPAREE PAR RC
      lc_Nom = ExtraitChaîne(lc_Appli,1)
      SI lc_Nom = "C:\Program Files (X86)\SweetLight\TheLightingController.exe" ALORS
         ln_PID = Val(ExtraitChaîne(lc_Appli,2))
         SORTIR
      FIN
   FIN
   // Pas d'application, pas de touche...
   SI ln_PID=0 ALORS
      Erreur("Application non lancée")
      RETOUR
   FIN
   
   // Envoie la touche à l'application
   EnvoieTouche("A",ln_PID)
FIN


j'ai bien le message qui me dit que sweetlight est lancé mais par la suite le deuxième me dit le contraire, je dois surement me tromper quelque part mais je ne vois pas ou, merci pour toute aide.
Bruno
bruno
Stagiaire WDF
 
Messages: 4
Enregistré le: Mar 26 Jan 2016 10:51

Message non lupar bruno » Lun 1 Fév 2016 17:51

Je me répond à moi même , j'ai fini par trouver comment faire en partant de votre suggestion du handle. voici l'exemple pour le logiciel Daslight :

Code: Tout sélectionner
SI led_Daslight..Visible = Vrai ALORS
   SI PageLight = "" ALORS RETOUR
   SI lettreencours = gsLettrelightshow1 ALORS
      //rien
   SINON
   hWnd2 est un entier sur 4 octets
   hWnd2=SysFenActive()
   nHandleFenWindev est un entier = hWnd2//handle de la fenêtre de mon application windev
   
   SI ResHandleFen <> Null ALORS
      EnvoieTouche(gsLettrelightshow1,ResHandleFen) // reshandlefen étant le handle du logiciel lumière
      SysDonneFocus(nHandleFenWindev,Faux)
      lettreencours = gsLettrelightshow1
   SINON
      Erreur("Appli non trouvée")
   FIN
FIN
FIN
bruno
Stagiaire WDF
 
Messages: 4
Enregistré le: Mar 26 Jan 2016 10:51


Retourner vers WinDev

cron