Hilfethema : PureBasic - Process

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Hilfethema : PureBasic - Process

Beitrag von STARGÅTE »

Tachchen,

ich bin nun bei 4.x über das HilfeThema PureBasic - Process gestolpert.
Und da steht nun:
Die Prozess Library ermöglicht das Ermitteln von Informationen über das aktuelle Programm sowie das Ausführen anderer Programme und die Kommunikation mit ihnen. Sie bietet einen plattform-unabhängigen Zugriff auf den Umgebungsblock eines Programms, auf Programm-Parameter sowie die Standard Ein- und Ausgabe.
Das hört sich ganz interessant an, ich denke mal diese "Kommunikation" wäre nun eine alternative zu meinem derzeitigen GlobalMemory oder der Zwicshenablage.

Dummerweise gibt es leiner kein Beispielcode zum angucken, hat von euch jemand erfahrung mit den Proceduren:
WriteProgramString, ReadProgramString, GetEnvironmentVariable, SetEnvironmentVariable, ...

Wäre nett wenn mir einer ein Beispielcode zeigen würde, habe bei der Suche nix gefunden
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Ist gestern (heute) spät geworden was? :mrgreen:

Ich hab da was probiert, scheint aber nicht zu funktionieren:

EXE:

Code: Alles auswählen

SetEnvironmentVariable("VAL", "1234")

Repeat
	Delay(100)
Until GetEnvironmentVariable("VAL") <> "1234"

MessageRequester("Wichtige Mitteilung", "Die Variable " + Chr(34) + "VAL" + Chr(34) + " wurde geändert!")
Test Code:

Code: Alles auswählen

path$ = OpenFileRequester("EXE auswählen", "", "EXE Datein (*.exe)|*.exe", 0)

If RunProgram(path$)
	Debug GetEnvironmentVariable("VAL")
	SetEnvironmentVariable("VAL", "4321")
EndIf

So solte es meiner Meinung nach funktionieren...


Andreas
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

funzt leider nicht :(

einerseits ist
Debug GetEnvironmentVariable("VAL")
leer und die EXE gibt auch keine meldung auf eine änderung.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Er schreibt ja auch das es eigentlich so gehen müsste aber nicht geht...
Bei mir gehts auch nicht...

EDIT: Wobei ichs jetz hingekriegt hab das es in eine Richtung funktioniert...
EDIT2: Obwohl, es funktioniert nur wenn man die Variable vorher Definiert..
EDIT3: Man kann die Hilfe zu SetEnvironmentVariable auch so interpretieren das es gar nicht zum Austausch gedacht ist sonder nur zur weitergabe beim start...
(\/) (°,,,°) (\/)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

ich glaub environment-variablen gehen so nicht ...
irgend was hab ich da mal gelesen, weis nur nicht mehr wo.

Umgebungsvariablen kann das Vaterprozess erstellen und auch wieder
einlesen. Erstellt das Programm nun ein Kindprozess, so erbt dieser
Prozess die Umgebungsvariablen. Aber wenn der Vaterprozess nun seine
Umgebungsvariablen ändert, berührt das die Umgebungsvariablen
des Kindprozesses nicht. Genau so umgekehrt. Kann sein, dass es sich
dabei nur um die PB-Befehle für die Umgebungsvariablen handelt, und
mit WinAPI geht das ... da hab ich aber absolut keine schimmer mehr.
(alle angaben ohne Gewähr)

Zur Kommunikation zwischen Programmen ist da die Konsole aber
geeignet. Durch WriteProgramString() auf der Vaterprozess seite und
Print() auf der Kindprozess seite können beliebig viele Daten
ausgetauscht werden. Der Kindprozess greift dabei einfach auf die
Konsole zu, als ob er mit einem normalen Benutzer agiert. (Input(),
Print(), PrintN(), usw.) und der Vaterprozess nutzt halt die Befehle der
Prozesslibrary (WriteProgramString(), WriteProgramStringN(), usw.)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Genau das hab ich mir auch gedacht, aber die Hilfe beschreibt das sehr zweideutig...
Aber das mit der Console is auch nich grad das gelbe vom Ei... Ich Benutze weiterhin einfach das Netzwerk dafür...
Wär einfach zu schön gewesen wenns so einfach geht^^
(\/) (°,,,°) (\/)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Hm, die Konsole ist eigentlich besser, als Netzwerk ... was ist, wenn auf
dem Zielsystem keine Netzwerkprotokolle installiert sind? Oder wegen
sicherheit deaktiviert? ... dann hast ein Problem :wink: ... mal davon
abgesehen das Server auch von außen angegangen werden können,
auch wenn meist ne Firewall usw. den entsprechenden Port eigentlich
sperrt.

Und rohe Daten können inzwischen auch mit den PB-Befehlen so
übertragen werden. Die Konsole sieht der Benutzer nicht und ist min.
genau so einfach zu realisieren wie über Netzwerk. Aber am ende
vermutlich doch nur geschmackssache.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Wohl war, ich hab halt mal damit angefangen Netzwerk zu benutzen weil ich von nichts anderem wusste, und dann hat man so seine Codeschnipsel die man immer weiterverwendet^^
Mal sehen, man hat bestimmt einen Geschwindigkeitsvorteil mit der Console...
(\/) (°,,,°) (\/)
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

@PMV: Irgendwie krieg ichs nich gebacken :oops:, könntest du ein winziges Test-Program posten?
(\/) (°,,,°) (\/)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Childprocess.exe

Code: Alles auswählen

OpenConsole()

PrintN("Ich bin der Childprocess.exe")

CloseConsole()
Hauptprogramm

Code: Alles auswählen

EnableExplicit
Define hProcess.l

OpenConsole()

hProcess = RunProgram("ChildProcess.exe", "", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Hide)

While ProgramRunning(hProcess)
  If AvailableProgramOutput(hProcess)
    PrintN("Childprocess.exe: " + ReadProgramString(hProcess))
  Else
    Delay(1)  
  EndIf
Wend
PrintN("ChildProcess.exe wurde beendet")
Input()
Das einfachste vom einfachen ;-)

Edit: irgend was musste ich ja falsch machen /:->

MFG PMV
Zuletzt geändert von PMV am 17.02.2008 19:31, insgesamt 1-mal geändert.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten