2 programme variablen austauschen

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

2 programme variablen austauschen

Beitrag von Brügge »

huhu! ^^

ich habe in der Hilfe gelesen, das man mit Runprogram() auch Informationen austauschen kann.

Ich habe alles versucht aber da tut sich nix :((
Kann mir wer 2 Programme schreiben die nur 1 string rübernehmen? damit ich sehe wie es geht?

thx @ all!!

bye
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Es gibt da viele Möglichkeiten, aber vielleicht meinst Du dieses:
Programm Test.exe

Code: Alles auswählen

; test.exe
Text.s = GetEnvironmentVariable("MyTest")
MessageRequester("", Text)
Programm das den String setzt und test.exe aufruft:

Code: Alles auswählen

SetEnvironmentVariable("MyTest", "PureBasic Rulez")
RunProgram("test.exe")
Ansonsten vielleicht mal unter "ProgramParameter()" in der Hilfe
nachschauen, falls sowas gemeint ist.

Falls noch eine andere Möglichkeit gemeint ist, bitte genauere Angaben
machen, bzw. sollte auch über suchen eine menge zu finden sein.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

danke für die schnelle antwort!!

kann das eine programm nur senden und das andere nur empfangen?? oder geht beides?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Brügge hat geschrieben:danke für die schnelle antwort!!

kann das eine programm nur senden und das andere nur empfangen?? oder geht beides?
Nein, die Environmentvariable muß vor RunProgram gesetzt sein und wird an
den mit RunProgram gestarteten Process vererbt. Nachträglich ist nichts
veränderbar.

GlobalSharedMemory aus den PBOSL Libraries ermöglicht einen gemeinsamen
Memory zwecks Datenaustausch.

Desweiteren gibts noch die Möglichkeit von Messages usw., einfach mal suchen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

och nee

gibt es nicht eine einfachere möglichkeit? also ziel ist:

das erste programm sendet sehr oft die variable "Prog1"
das 2te programm sendet sehr oft die variable "prog2"
also nicht nur ein mal sondern jede sekunde.

ist das nicht anders möglich?
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Brügge hat geschrieben:och nee

gibt es nicht eine einfachere möglichkeit? also ziel ist:

das erste programm sendet sehr oft die variable "Prog1"
das 2te programm sendet sehr oft die variable "prog2"
also nicht nur ein mal sondern jede sekunde.

ist das nicht anders möglich?
Unter Windows mit SendMessage, wenn du eine Fensteranwendung machst. Schau mal in der MSDN, da steht was zu Userdefinierten Messages.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

unter stichwort windows habe ich kein sendmessage
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Warum nicht einfach, so wie in der Hilfe geschrieben, mit
#PB_Program_Open|#PB_Program_Read|#PB_Program_Write
das Programm starten und per
ReadProgramString() / WriteProgramString()
bzw. für das gestartete Programm mit
Input() / ReadConsoleData() / Print() / WriteConsoleData()
kommunizieren :?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Brügge hat geschrieben:unter stichwort windows habe ich kein sendmessage
SendMessage_() ist eine API. Und APIs stehen nicht in der PB-Hilfe. ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hab mal ein Beispiel mit GlobalMemory erstellt, IMHO das einfachste.

Code: Alles auswählen

Structure test
  Prog1.s{255}
  Prog2.s{255}
EndStructure

Global *Mem.test = PBOSL_AllocateMemoryGlobal("MeinGemeinsamerSpeicher", SizeOf(test))

Procedure TimeProc(hWnd.l, uMsg.l, idEvent.l, dwTime.l)
  Static MyVar.s
  If idEvent = 1
    If MyVar <> *Mem\Prog1
      MyVar = *Mem\Prog1
      Debug MyVar
    EndIf
  EndIf
EndProcedure

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 200, "")
  SetTimer_(WindowID(0), 1, 1000, @TimeProc()); alle sekunde auf änderungen Testen
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 80, 30, "Random")
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
        Case #PB_Event_Gadget
          If EventGadget() = 0
            *Mem\Prog1 = "Test " + Str(Random(1000))
          EndIf
      EndSelect
    ForEver
  EndIf
EndIf
PBOSL_FreeMemoryGlobal(*Mem)
2 Variablen werden in der Strukture unterstützt, die Werte stehen allen
Programmen, das mit demselben String Speicher reservieren zur Verfügung.
Per Timer wird hier nur Prog1 alle Sekunde auf änderungen geprüft.

Hoffe mal das dies verständlich ist :wink:

Gruß
Thomas

// Nachtrag:
2x mit externen Debugger starten, damit man es sieht
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten