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 ?
:roll: :?: :!:

Publié : lun. 10/déc./2007 10:54
par Mwoua
2 idées, peut-être un peut fafelues :roll:

- 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
C'est possible, jette un oeil là : http://www.purebasic.fr/english/viewtop ... 00++launch

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.
:D

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 :)