|
Application mono-instance |
Iniciado por ejacob, 19,nov. 2004 10:50 - 11 respuestas |
| |
| | | |
|
| |
Publicado el 19,noviembre 2004 - 10:50 |
Bonjour à tous,
Je souhaite créer une application de type mono-instance cad que si elle tourne déjà sur un poste, tout lancement de cette appli rebascule l'instance déjà lancée en avant plan.
Cette possibilité en générant un exécutable ne me convient car elle se contente d'afficher un message d'erreur si l'appli est lancée plusieurs fois.
Mon problème vient de l'API Windows GetWindow.
Voici le bout de code me posant un problème :
PROCEDURE GetPreviousWindow() ResAPI est un entier NbInstance est un réel
NbInstance = ExeLancé("C:\Mes Projets\Mon_Projet\Exe\MonoInstance.exe")
SI NbInstance > 0 ALORS ResAPI = AppelDLL32("user32", "GetWindow" , NbInstance, 3) RENVOYER ResAPI SINON ResAPI = 0 RENVOYER ResAPI FIN
C'est l'appel de l'API GetWindows qui me retourne une erreur, m'indiquant que le nombre de paramètres passés n'est pas cohérent. Pourtant cela a l'air d'être bon.
Je remercie d'avance tout personne qui pourra me permettre de sortir de cette impasse.
Cordialement,
Erwan JACOB. |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 11:38 |
Salut
J'ai déjà utilisé la méthode suivante, qui est simple à mettre en oeuvre. A l'ouverture du projet, je bloque un fichier avec HBloqueFichier. Si le blocage marche, je suis seul. Si le blocage échoue, je quitte l'application.
Ciao http://wdgotcha.atspace.com |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 12:07 |
Je n'ai pas de base de données et cela n'a rien à voir avec ce sujet. Il faut imaginer une appli qui est en cours d'exécution. Si je reclique sur l'exécutable je dois relancer en premier plan la même instance. Pour ce faire, il faut utiliser les API Windows (GetWindow notamment). Cela marche tres bien en VB6 mais je n'arrive pas à le réaliser sous Windev. |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 13:21 |
NbInstance est un entier //pas un reel -- ----------- Petit Malin
"Erwan JACOB" <ejacob@altern.org> a écrit dans le message de news: 419da9f2$1@news.pcsoft.fr...
Bonjour à tous,
Je souhaite créer une application de type mono-instance cad que si elle tourne déjà sur un poste, tout lancement de cette appli rebascule l'instance déjà lancée en avant plan.
Cette possibilité en générant un exécutable ne me convient car elle se contente d'afficher un message d'erreur si l'appli est lancée plusieurs fois.
Mon problème vient de l'API Windows GetWindow.
Voici le bout de code me posant un problème :
PROCEDURE GetPreviousWindow() ResAPI est un entier NbInstance est un réel
NbInstance = ExeLancé("C:\Mes Projets\Mon_Projet\Exe\MonoInstance.exe")
SI NbInstance > 0 ALORS ResAPI = AppelDLL32("user32", "GetWindow" , NbInstance, 3) RENVOYER ResAPI SINON ResAPI = 0 RENVOYER ResAPI FIN
C'est l'appel de l'API GetWindows qui me retourne une erreur, m'indiquant que le nombre de paramètres passés n'est pas cohérent. Pourtant cela a l'air d'être bon.
Je remercie d'avance tout personne qui pourra me permettre de sortir de cette impasse.
Cordialement,
Erwan JACOB.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 14:22 |
"Erwan JACOB" <ejacob@altern.org> écrivait news:419da9f2$1 @news.pcsoft.fr:
ResAPI est un entier NbInstance est un réel ResAPI = AppelDLL32("user32", "GetWindow" , NbInstance, 3)
Salut,
Pour la fcontion "GetWindow", WDAPI donne :
RetourFonction est un entier // Type C :HWND hWnd est un entier // Type C :HWND uCmd est un entier sans signe // Type C :UINT
RetourFonction=API("USER32","GetWindow",hWnd,uCmd)
Les types des variables sont primoridiaux avec les APIs !!
Mais au dela de cela, cela ne fonctionnera pas !!
Cette fonction ne fait pas cela, regarde la doc sur la MSDN
http://msdn.microsoft.com/library/default.asp…- us/winui/winui/windowsuserinterface/windowing/windows/windowreference/win dowfunctions/getwindow.asp
-- En esperant t'avoir aidé. ted |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 17:23 |
Alors moi j'aurais fait comme ça :
executable est une chaîne ASCIIZ sur 255 //par exemple executable = "C:\windows\system32\notepad.exe" SI ExeLancé(executable) > 0 ALORS SI AppelDLL32("user32", "EnumWindows", &VerifierNom, &executable) <> 0 ALORS Trace("ok") FIN
PROCEDURE VerifierNom(hwnd, lParam) buffer est une chaîne ASCIIZ sur 255 ChaineAComparer est une chaîne ASCIIZ sur 255 Transfert(&ChaineAComparer, lParam, 255) nbch est un entier nbch = API("user32", "GetWindowModuleFileName", hwnd, &buffer, 255) SI nbch > 0 ALORS SI Gauche(buffer, nbch) = Gauche(ChaineAComparer, nbch) ALORS SI PAS API("user32", "SetForegroundWindow", hwnd) ALORS Erreur("ça bugue") FIN RENVOYER Faux FIN FIN RENVOYER Vrai
Le seul truc qui coince c'est que c'te saleté de GetWindowModuleFileName me renvoie 0 caractère pour toutes les fenêtres qui ne sont pas des filles de la fenêtre qui le lance (apparement), ce qui est bien sur le cas de mon notepad.exe Si quelqu'un sait pourquoi, moi je sèche !!!
--
--------- Petit Malin qui fait pas le malin sur ce coup là
"Erwan JACOB" <ejacob@altern.org> a écrit dans le message de news: 419da9f2$1@news.pcsoft.fr...
Bonjour à tous,
Je souhaite créer une application de type mono-instance cad que si elle tourne déjà sur un poste, tout lancement de cette appli rebascule l'instance déjà lancée en avant plan.
Cette possibilité en générant un exécutable ne me convient car elle se contente d'afficher un message d'erreur si l'appli est lancée plusieurs fois.
Mon problème vient de l'API Windows GetWindow.
Voici le bout de code me posant un problème :
PROCEDURE GetPreviousWindow() ResAPI est un entier NbInstance est un réel
NbInstance = ExeLancé("C:\Mes Projets\Mon_Projet\Exe\MonoInstance.exe")
SI NbInstance > 0 ALORS ResAPI = AppelDLL32("user32", "GetWindow" , NbInstance, 3) RENVOYER ResAPI SINON ResAPI = 0 RENVOYER ResAPI FIN
C'est l'appel de l'API GetWindows qui me retourne une erreur, m'indiquant que le nombre de paramètres passés n'est pas cohérent. Pourtant cela a l'air d'être bon.
Je remercie d'avance tout personne qui pourra me permettre de sortir de cette impasse.
Cordialement,
Erwan JACOB.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 17:37 |
j'utilise un code que l'on m'a filé sur ce forum (je ne sais plus qui...).
# code du projet :
TitreFenetreApplication est une chaîne= "Mon Appli" HandleFenêtre est un entier
SI ExeLancé(ExeInfo(exeNom))>1 ALORS // Le programme est déjà lancé HandleFenêtre = SysFenHandle(TitreFenetreApplication) SI SysHandleValide(HandleFenêtre) ALORS SysDonneFocus(HandleFenêtre) FinProgramme() SINON // OK l'application n'est pas lancée FIN
tu compiles une exe multiinstance et le tour est joué...
A+ Adrien. www.codewindev.fr.st |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 17:50 |
Comme c'est toujours juste après un post qu'on trouve une info, http://support.microsoft.com/… : INFO: GetWindowModuleFileName & GetModuleFileName Work Only with the Calling Process
Il est conseillé d'utiliser plutot GetModuleFileNameEx qui se trouve dans psapi.dll Donc je remplace mon appel à GetWindowModuleFileName par nbch = API("psapi", "GetModuleFileNameEx", hwnd, Null, &buffer, 255) mais là Windev me dit que j'ai fait une Erreur à la ligne 6 du traitement Procédure locale VerifierNom. Vous avez appelé la fonction API. La fonction 'GetModuleFileNameEx' n'a pas été trouvée dans la DLL psapi Alors que j'ai un XP donc ca devrait marcher. Donc toujours pas de quoi faire le malin. 
--
--------- Petit Malin |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 18:51 |
mouais c ce que j'essayais de faire via les API  ça m'apprendra à pas connaitre les fonctions Windev
--
--------- Pas Malin
"Adrien" <adrien.titou@ifrance.com> a écrit dans le message de news: 419e0973@news.pcsoft.fr...
j'utilise un code que l'on m'a filé sur ce forum (je ne sais plus qui...). # code du projet : TitreFenetreApplication est une chaîne= "Mon Appli" HandleFenêtre est un entier SI ExeLancé(ExeInfo(exeNom))>1 ALORS // Le programme est déjà lancé HandleFenêtre = SysFenHandle(TitreFenetreApplication) SI SysHandleValide(HandleFenêtre) ALORS SysDonneFocus(HandleFenêtre) FinProgramme() SINON // OK l'application n'est pas lancée FIN tu compiles une exe multiinstance et le tour est joué... A+ Adrien. www.codewindev.fr.st |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 18:53 |
mais n'empêche, dans l'hypothèse, on n'avait pas le titre de la fenêtre mais le nom de l'exécutable. si le titre de la fenetre est variable,comment on fait ?
--
--------- Petit Malin
"Adrien" <adrien.titou@ifrance.com> a écrit dans le message de news: 419e0973@news.pcsoft.fr...
j'utilise un code que l'on m'a filé sur ce forum (je ne sais plus qui...). # code du projet : TitreFenetreApplication est une chaîne= "Mon Appli" HandleFenêtre est un entier SI ExeLancé(ExeInfo(exeNom))>1 ALORS // Le programme est déjà lancé HandleFenêtre = SysFenHandle(TitreFenetreApplication) SI SysHandleValide(HandleFenêtre) ALORS SysDonneFocus(HandleFenêtre) FinProgramme() SINON // OK l'application n'est pas lancée FIN tu compiles une exe multiinstance et le tour est joué... A+ Adrien. www.codewindev.fr.st |
| |
| |
| | | |
|
| | |
| |
Publicado el 19,noviembre 2004 - 19:36 |
Bon c'était GetModuleFileNameExA (allez savoir pourquoi !) Mais je n'arrive toujours pas à lafaire marcher.
ça intéresse tjs quelqu'un ou j'arrete de me répondre a moi meme sur cesujet --
--------- Petit Malin
"Petit Malin" <nospam@9online.fr> a écrit dans le message de news: 419e0d46@news.pcsoft.fr...
Comme c'est toujours juste après un post qu'on trouve une info, http://support.microsoft.com/… : INFO: GetWindowModuleFileName & GetModuleFileName Work Only with the Calling Process Il est conseillé d'utiliser plutot GetModuleFileNameEx qui se trouve dans psapi.dll Donc je remplace mon appel à GetWindowModuleFileName par nbch = API("psapi", "GetModuleFileNameEx", hwnd, Null, &buffer, 255) mais là Windev me dit que j'ai fait une Erreur à la ligne 6 du traitement Procédure locale VerifierNom. Vous avez appelé la fonction API. La fonction 'GetModuleFileNameEx' n'a pas été trouvée dans la DLL psapi Alors que j'ai un XP donc ca devrait marcher. Donc toujours pas de quoi faire le malin.  -- --------- Petit Malin |
| |
| |
| | | |
|
| | |
| |
Publicado el 24,noviembre 2004 - 13:11 |
Désolé pour le retard de réponse. Je te remercie beaucoup, ca marche nikel!
Erwan |
| |
| |
| | | |
|
| | | | |
| | |
|