Seite 1 von 2

daten an programm eingabe senden

Verfasst: 21.06.2008 00:26
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

Verfasst: 21.06.2008 00:58
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

Verfasst: 21.06.2008 01:19
von Fluid Byte
Man kann mit WriteProgramData() einen Tastendruck simulieren? Oder hab ich jetzt was falsch verstanden?

Verfasst: 21.06.2008 01:58
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...

Verfasst: 21.06.2008 08:29
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]

Verfasst: 21.06.2008 10:45
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

Verfasst: 21.06.2008 10:55
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

Verfasst: 21.06.2008 15:01
von Deluxe0321
[OT]
@ Kaeru
Das sollte man als Standard einführen. Sieht nett aus :lol:
[/OT]

Verfasst: 21.06.2008 16:04
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

Verfasst: 21.06.2008 17:26
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"...