PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Mono instance
Mono instance
Débuté par Philippe, 17 mai 2005 12:56 - 1 réponse
Posté le 17 mai 2005 - 12:56
Bonjour,

Je souhaiterai savoir comment faire pour lancer une application Windev mono instance à partir d'une application tierce mais en passant des paramètres de positionnement de fenêtre différents à chaque lancement.
L'instance déjà active doit prendre en compte les nouveaux paramètres et repositionner la fenêtre.

Merci
Posté le 17 mai 2005 - 16:54
>>Exe Principal : // L'exé qui lance l'exé mono-instance

Variable Globale au Projet :
HandleExeMonoInstance est un entier // Ne pas modifier au cours du programme
NumConnect est un entier // Ne pas modifier au cours du programme

PROCEDURE Globale au projet :

PROCEDURE ExeMonoInstance()
SI SysHandleValide(HandleExeMonoInstance) ALORS
// Une instance de l'exé mono-instance est active
Res est un booleen
Res = DDEEnvoie(NumConnect,"AppelDDE","FenX;FenY",1)
// FenX et FenY correspondent à la nouvelle position de la fenetre
SI Res ALORS la fenetre est repositionnée SINON Erreur(...)
SysDonneFocus(HandleExeMonoInstance)
// Focus sur l'exé mono-instance si tu veux
SINON
// Aucune instance de l'exé mono-instance
NumConnect = 0
SI LanceAppli(fRepExe()+"\ExeMonoInstance.exe "FenX;FenY",exeActif,exeNonBloquant) ALORS
Multitâche()
i est un entier
POUR i = 1 A 10
NumConnect = DDEConnecte("ExeMonoInstance","AppelDDE")
SI NumConnect > 0 ALORS SORTIR
Multitâche(-50)
// Du temps pour la liaison DDE
FIN
HandleExeMonoInstance = SysFenHandle("TitreDeLaFenetreDeExeMonoInstance")
// Correspond au titre de la fenetre principale de l'exé mono-instance
SI HandleExeMonoInstance = Null OU NumConnect = 0 ALORS Erreur("Impossible d'établir la connexion DDE")
// En cas d'erreur, vaut mieux fermer l'exé mono-instance et retenter un lancement

SINON Erreur("Impossible de lancer ExeMonoInstance")
// Sauf erreur, un lien DDE est activé entre les 2 exé

FIN

Lorsque tu fais appel à l'exé mono-instance, il te suffit de lancer la procédure ExeMonoInstance()
// Tu peux même passer FenX et FenY en paramètre, ce que je n'ai pas fait ici


Exe mono-instance ou la position de la fenetre doit changer :

Déclaration Globale au Projet :
DDEEvénement("AppelDDE",DDEARecevoir)
// Lorsque le lien est activé, il est prêt a recevoir les instructions de l'exé principal
// La procédure "AppelDDE" est dans l'instruction DDEEnvoie() de l'exé principal
// (meme nom !)


PROCEDURE Globale au projet :

PROCEDURE AppelDDE()
// La procédure à exécuter sur ordre de l'exé principal par DDEEnvoie
_DDE.Cr = 1 // Renvoie OK à DDEEnvoie de l'exé principal
// _DDE.Chaine correspond au 3ème paramètre de DDEEnvoie(), c-a-d FenX et FenY
FenX est un entier = ExtraitChaine(_DDE.Chaine,1,";")
FenY est un entier = ExtraitChaine(_DDE.Chaine,2,";")

LaFenetre..X = FenX // Tu repositionnes la fenetre
LaFenetre..Y = FenY


1èreFenetreDuProjet :
Déclaration globale :

// Ici, c'est lorsque tu lances l'exé mono-instance la première fois, tu récupères les coordonnées de la fenetre avec la ligne de commande
// envoyée par LanceAppli() plus haut
MaFenetre..X = Val(ExtraitChaine(LigneCommande(),1,";"))
MaFenetre..Y = Val(ExtraitChaine(LigneCommande(),2,";"))


Condition pour que ca marche : les 2 exe doivent être dans le meme répertoire
A tester !