Page 1 sur 1
Porgramme <=> programme !?
Publié : lun. 10/déc./2007 7:54
par Mytic
Bonjour…
Je voudrai savoir comment procéder pour faire communiquer deux programmes entre eux ?
Je m’explique !
J’ai remarqué qu’on ne pouvez pas faire une liaison à deux sens comme ça :
Porgramme <=> programme
Mais que comme ça :
Porgramme => programme
Même avec les variables d’environnement, ça ne marche pas !
Le programme x qui exécute le programme y peut envoyer des données à y , mais pas le contraire.
Je pense que j’étais claire ?

Publié : lun. 10/déc./2007 10:54
par Mwoua
2 idées, peut-être un peut fafelues
- Si tu n'as pas beaucoup de données à faire passer, clef dans la base de registre (:?:)
- Sinon, tu peux les faire communiquer en utilisant les fonctions de network. Ça t'oblige à ouvrir un port de communication, mais ça devrait marcher...
Publié : lun. 10/déc./2007 11:15
par Droopy
Publié : lun. 10/déc./2007 13:55
par Mytic
Merci…
@Mwoua :
Original , mais :
Le registre c’est pas très rapide et risquer !
Le network : trop de ressources + parfeu !
@Droopy :
Trop cool , la communication via GadgetID.

Publié : lun. 10/déc./2007 21:31
par Droopy
Essaye avec ça :
Code : Tout sélectionner
; Prog1
; *****************************************************************************
Global *data_in.COPYDATASTRUCT
Global data_out.COPYDATASTRUCT
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If uMsg = #WM_COPYDATA
*data_in = lParam
temp.s = PeekS(*data_in\lpData)
SetGadgetText(0, temp)
ProcedureReturn #True
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "Prog1")
CreateGadgetList(WindowID(0))
StringGadget(0,0,0,300,24,"Test")
ButtonGadget(1,0,28,300,24, "Send")
SetWindowCallback(@WndProc())
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
hwnd = FindWindow_(0, "Prog2")
If hwnd
temp.s = GetGadgetText(0)
data_out\cbData = Len(temp) + 1 ; Nullbyte
data_out\lpData = @temp ; Zeiger auf Daten
SendMessage_(hwnd, #WM_COPYDATA, WindowID(0), data_out)
EndIf
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
et
Code : Tout sélectionner
; Prog2
; *****************************************************************************
Global *data_in.COPYDATASTRUCT
Global data_out.COPYDATASTRUCT
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If uMsg = #WM_COPYDATA
*data_in = lParam
temp.s = PeekS(*data_in\lpData)
SetGadgetText(0, temp)
ProcedureReturn #True
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "Prog2")
CreateGadgetList(WindowID(0))
StringGadget(0,0,0,300,24,"Test")
ButtonGadget(1,0,28,300,24, "Send")
SetWindowCallback(@WndProc())
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
hwnd = FindWindow_(0, "Prog1")
If hwnd
temp.s = GetGadgetText(0)
data_out\cbData = Len(temp) + 1 ; Nullbyte
data_out\lpData = @temp
SendMessage_(hwnd, #WM_COPYDATA, WindowID(0), data_out)
EndIf
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
Publié : mar. 11/déc./2007 11:51
par Cls
Publié : mar. 11/déc./2007 19:33
par Mytic
Merci pour votre aide
