Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2510 connectés 

  FORUM HardWare.fr
  Programmation

  [VB] App.PrevIntance ok mais ... et alors ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB] App.PrevIntance ok mais ... et alors ?

n°22921
Kyle_Katar​n
Posté le 06-04-2001 à 13:18:52  profilanswer
 

Ok ça marche bien pour savoir si l'application est déjà en mémoire. Je suppose qu'il passe par un Mutex...
 
Comment faire pour pouvoir alors "communiquer" avec l'instance précédente ? Par exemple lui envoyé un message(pour lui donner le focus par exemple)

mood
Publicité
Posté le 06-04-2001 à 13:18:52  profilanswer
 

n°23077
Kyle_Katar​n
Posté le 06-04-2001 à 23:06:21  profilanswer
 

up

n°23143
verdy_p
Posté le 08-04-2001 à 11:06:19  profilanswer
 

Le plus efficace est de passer par l'enregistrement d'une classe de fenêtre: en effet la classe de fenêtre est partagée par toutes les instances d'applications qui utilisent ce type de fenêtre. On peut alors communiquer entre application en utilisant une zone d'échange référencée par des données utilisateurs stockées dans la classe de fenêtre. Là il faut faire attention juste au nom de la classe de fenêtre qui doit être unique (le mieux est d'y inclure un GUID généré une bonne fois pour toute, avec MKGUID.EXE, et inscrit dans les sources de l'application). Seul problème: les accès concurrents à la ressources partagée: il faut généralement un mutex pour contrôler cet accès et il y a en plus des problèmes pour échanger des structures complexes, en plus du fait que les zones mémoires entres les instances multiples d'une application sont protégées... Sinon on peut toujours tenter d'énumérer les fenêtres qui utilisent cette classe, et leur envoyer des messages (mais il faut alors que l'application ait au moins une fenêtre utilisant cette classe unique, même si la fenêtre est cachée, c'est parfois un peu lourd, et en plus ça a toujours le défaut de synchroniser la réception et l'envoi de message, car l'expéditeur est bloqué pendant que son message est traité par l'application réceptrice)...
 
L'autre solution est d'utiliser une Mailbox (ça utilise les fonctions du réseau Netbios Microsoft, et ça marche sur toutes les versions de Windows), ou un Pipe nommé (mais ça ne marche pas sous Windows 95, uniquement depuis Windows 98 ou sous NT/2000). Le piège étant de créer un nom unique mais facilement repérable pour le pipe nommé ou la Mailbox (là aussi un GUID peut aider à rendre ce nom unique). L'intérêt de la Mailbox est qu'elle gère toute seule la file d'attente entre plusieurs applications qui communiquent avec elle (la gestion du Mutex associé est intégrée dans Windows), et que l'envoi n'a pas besoin d'être synchrone.

n°23149
Kyle_Katar​n
Posté le 08-04-2001 à 13:03:44  profilanswer
 

la premuère méthode m'interesse. T'aurais des exemple en Vb ou des adresses de site où je pourrais en trouver ?

n°23190
Spicy
Posté le 09-04-2001 à 00:50:05  profilanswer
 

Une petite technique pour communiquer avec la préinstance
Tu mets un text invisible dans ta form (TextedeCommunication)
Tu récupères TextedeCommunication.hwnd et le place dans la base de registre ou dans un ini au démarrage de l'appli.
Private Sub TextTransitoire_Change()
msgbox("jai eu un enfant" )
End sub
et pis quand tu démarres la second application tu récupères le hwnd de l'application (Lehwnd) dans la base de registre ou l'ini
et tu envois
SendMessage Lehwnd, &HC, 0, ByVal "Coucou maman"
 
dont voilà la déclaration à faire avant
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
récapitlatif:  
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Private Sub Form_Load()
If App.PrevInstance Then
SendMessage GetSetting(App.EXEName, "Hwnd", "TextedeCommunication" ), &HC, 0, ByVal "Coucou maman"
       End
End If
    SaveSetting App.EXEName, "Hwnd", "TextedeCommunication", TextedeCommunication.hwnd
End Sub
 
 
Private Sub TextedeCommunication_Change()
MsgBox ("jai eu un enfant" )
End Sub
 
si tu prends les précautions de rigueur ça doit rouler
Bonne chance pour ton prog

n°23497
Kyle_Katar​n
Posté le 09-04-2001 à 21:42:08  profilanswer
 

merci, je vais pouvoir m'amuser un peu ;-)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VB] App.PrevIntance ok mais ... et alors ?

 

Sujets relatifs
Plus de sujets relatifs à : [VB] App.PrevIntance ok mais ... et alors ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)