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

 


Dernière réponse
Sujet : [VB] App.PrevIntance ok mais ... et alors ?
Kyle_Katarn merci, je vais pouvoir m'amuser un peu ;-)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Kyle_Katarn merci, je vais pouvoir m'amuser un peu ;-)
Spicy 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
Kyle_Katarn la premuère méthode m'interesse. T'aurais des exemple en Vb ou des adresses de site où je pourrais en trouver ?
verdy_p 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.
Kyle_Katarn up
Kyle_Katarn 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)

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