Seite 1 von 2
2 programme variablen austauschen
Verfasst: 13.02.2007 22:22
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
Verfasst: 13.02.2007 22:29
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
Verfasst: 13.02.2007 22:38
von Brügge
danke für die schnelle antwort!!
kann das eine programm nur senden und das andere nur empfangen?? oder geht beides?
Verfasst: 13.02.2007 22:45
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.
Verfasst: 13.02.2007 22:49
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?
Verfasst: 13.02.2007 23:09
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.
Verfasst: 13.02.2007 23:12
von Brügge
unter stichwort windows habe ich kein sendmessage
Verfasst: 13.02.2007 23:21
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

Verfasst: 13.02.2007 23:29
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
Verfasst: 13.02.2007 23:33
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
Gruß
Thomas
// Nachtrag:
2x mit externen Debugger starten, damit man es sieht