Code : Tout sélectionner
;C'est une simple démonstration d'échange de données entre processus
;je recommande de compiler le code pour l'essayer
;ensuite, il faut exécuter deux fois l'exécutable
;la structure info peut prendre plusieurs variables mais pas de chaine
;pour l'exemple, ne pas toucher à la structure info
Structure info
a.l
EndStructure
Procedure MaProcedureCallback(WindowID, Message, wParam, lParam)
Resultat = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COPYDATA
*copie.COPYDATASTRUCT=lParam
Select *copie\dwData
Case 12
*donnee.info=*copie\lpData
SetGadgetText(1, Str(*donnee\a))
ProcedureReturn 0
EndSelect
EndSelect
ProcedureReturn Resultat
EndProcedure
If FindWindow_( 0, "Fenêtre 1" )
test.l=1
EndIf
If OpenWindow(0, 600, 200, 200, 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "Fenêtre 1")
If test=1
SetWindowTitle(0, "Fenêtre 2")
EndIf
CreateGadgetList(WindowID(0))
TextGadget(0, 20, 10,160,20,"Donnée numériques reçues")
StringGadget(1,20, 30,160,20,"")
TextGadget(2, 20, 70,160,20,"Donnée numériques à envoyer")
StringGadget(3,20, 90,160,20,"")
ButtonGadget(4, 20, 120, 160, 20, "Envoyer donnée")
SetWindowCallback(@MaProcedureCallback())
Repeat
EventID.l = WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case 4
donnee.info
donnee\a=Val(GetGadgetText(3))
envoie.COPYDATASTRUCT
envoie\dwData=12
envoie\cbData=SizeOf(donnee)
envoie\lpData=@donnee
Resultat$ = GetWindowTitle(0)
If Resultat$="Fenêtre 1"
cible.l = FindWindow_( 0, "Fenêtre 2" )
Else
cible.l = FindWindow_( 0, "Fenêtre 1" )
EndIf
If cible
SendMessage_(cible, #WM_COPYDATA, WindowID(0), envoie)
Else
MessageRequester("Info","Cible non trouvée")
EndIf
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
