daten an programm eingabe senden

Anfängerfragen zum Programmieren mit PureBasic.
FrEeKsTeR
Beiträge: 24
Registriert: 04.06.2008 10:11

daten an programm eingabe senden

Beitrag von FrEeKsTeR »

ja ich binns schonwieder *g*
ich hab schonwieder ein problem, diesmal aber ein anderes programm.
ich habe mit runprogramm()
ein programm gestartet und versuche nun
mittels writeprogrammdata() verschiedene tasten an das programm zu senden. allerdings sagt mir eine fehlermeldung nach dem starten des programms vorgang read konnte nicht auf den speicher ausgeführt werden. weis jemand woran das liegen kann ?
hier mal der code

Code: Alles auswählen

If OpenConsole()
DateiName$ = "verzeichniss\prog.exe"
Arbeitsverzeichnis$ = "verzeichniss\"
parameter$ = ""

runprog = RunProgram(DateiName$ , parameter$ , Arbeitsverzeichnis$ , #PB_Program_Open | #PB_Program_Write | #PB_Program_Read)
If runprog
progid = ProgramID(runprog)
Delay(1000)
 *Buffer = AllocateMemory(2)
PokeC(*Buffer, 110)
WriteProgramData(Progid, *Buffer, 2)
EndIf

EndIf

würd mich über schnelle hilfe sehr freuen
mfg FrEeKsTeR
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

Kann jetzt deinen Code nicht auf die schnelle lokal Anpassen und testen...

Aber wenn Du 2 Byte reservierst - hast Du es im Unicodemodus compiliert?

gruss
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Man kann mit WriteProgramData() einen Tastendruck simulieren? Oder hab ich jetzt was falsch verstanden?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

schätze das ist sein denkfehler...

ich hab keine Ahnung, ob Tastendrücke über StdIn an einen Prozess gesendet werden.
ich würds eher über #WM_KeyDown probieren...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
FrEeKsTeR
Beiträge: 24
Registriert: 04.06.2008 10:11

Beitrag von FrEeKsTeR »

also in der refferenz steht ja drinn das 1 byte für ASCII und 2 byte für unicode reserviert werden. ich hab ketzt einfach mal die code 110 für das ASCII "n" zeichen benutzt weil als erstes im externen programm n gedrückt werden soll. allerdings startet mein programm das externe, dann dauert es nen bissl wegen dem delay und dann kommt der fehler das read nicht auf die und die speicher adresse verwendet werden kann und dann schielßt sich mein tool einfach und das externe programm läuft weiter (allerdings ohne das "n" gedrückt wird) und an fluid byte ja das siehst du richtig mit writepeogrammdata *g* das habe ich vor zu benutzen aber wie gesagt er spuckt mir ne felhermeldung
ach hab gerade was gesehen *g* der debugger spuckt mir das aus

"program is not an open program object"

also durch ausprobieren hab ich jetzt folgendes in versuchung

Code: Alles auswählen

If OpenConsole()
DateiName$ = "\verzeichniss\prog.exe"
Arbeitsverzeichnis$ = "\verzeichniss\"

runprog = RunProgram(DateiName$ , parameter$ , Arbeitsverzeichnis$ , #PB_Program_Open | #PB_Program_Write | #PB_Program_Read)
If runprog
pid = ProgramID(runprog)
Debug runprog
Debug pid
Delay(5000)
If pid
 *Buffer = AllocateMemory(1)
PokeC(*Buffer, 110)
WriteProgramData(pid, *Buffer, 1)
EndIf

EndIf

EndIf



also ich krig schonmal mit ProgrammID die richtige prozess id raus allerdings erkennt writeprogramdata() pid nicht an und sagt halt program is not an open program object weis einer vieleicht was ich falsch mache ?[/code]
FrEeKsTeR
Beiträge: 24
Registriert: 04.06.2008 10:11

Beitrag von FrEeKsTeR »

ok ich bin jetzt nen schritt weiter *g* weil mir ist aufgefallen das writeprogramdata() als ersten wert in der klammer nicht die prozess id erwartet sondern die nummer von runprog. also soweit so gut *g* jetzt mochte ich an das gestartete programm nen tastendruck senden (Enter oder n) wenn ich jetzt mit WriteProgramData() jetzt zw den ASCII wert von enter an das programm sende passiert einfach garnix und mein eigendliches programm schliest sich mit dem komentar program execution has finished sprich ist alles wunderbar gelaufen(seitens meines programmes) also wie schaff ich es jetzt tastendruck Enter oder tastendruck n an das geöffnete programm zu senden?
mfg FrEeKsTeR
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wie ich bereits sagte :mrgreen: ich bin mir nicht sicher :mrgreen: ob tastendrücke über StdIn :mrgreen: an ein Programm gesendet werden

es gab schon etliche beispiele dafür :mrgreen: und jedesmal :mrgreen: wurde ein tastendruck simuliert

geh mal auf [ Bild Suchen ] :mrgreen: und gib "tastendr* simulieren" ein :mrgreen:

dann solltest du 14 topics finden :mrgreen: von denen sich die meisten :mrgreen: damit beschäftigen
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

[OT]
@ Kaeru
Das sollte man als Standard einführen. Sieht nett aus :lol:
[/OT]
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 »

Kaeru Gaman hat geschrieben:wie ich bereits sagte :mrgreen: ich bin mir nicht sicher :mrgreen: ob tastendrücke über StdIn :mrgreen: an ein Programm gesendet werden

es gab schon etliche beispiele dafür :mrgreen: und jedesmal :mrgreen: wurde ein tastendruck simuliert

geh mal auf [ Bild Suchen ] :mrgreen: und gib "tastendr* simulieren" ein :mrgreen:

dann solltest du 14 topics finden :mrgreen: von denen sich die meisten :mrgreen: damit beschäftigen
Äh, no comment zu den Smileys Kindergarten?

Selbstverständlich ist

Code: Alles auswählen

WriteProgramStringN(runprog, "der string")
wesentlich einfacher und sinnvoller
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> no comment zu den Smileys
die smilies sind ein comment...

> Selbstverständlich ist WriteProgramStringN wesentlich einfacher und sinnvoller
hab ich nicht gewußt, wurde noch niemals in irgendeinem topic hier im forum erwähnt.
dann hätte ja durchaus schon vorher mal jemand einfach auf mein posting von gestern antworten können "doch das geht"...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten