Toon posts:

[perl] sendkeys, dokeys a-like

Pagina: 1
Acties:

Verwijderd

Topicstarter
Lo,

Ik ben begonnen met Perl. Om meteen even wat nuttigs te doen ben ik een basic programma wat iemand op mn bedrijf heeft geschreven aan het omkatten naar Perl. (Aangezien zijn script onleesbare slecht onderhoudbare troep is).

Nou gaat het allemaal aardig maar ik loop nu toch tegen een probleem aan. Ik moet via system() call een extern programma aanroepen (windows) en als dat programma gestart is dan verwacht dat programma op een soort van prompt de tekst "source <sourcetnaam>" en dan gaat ie 'sourcenaam' uitvoeren.

Probleem is nu duideljik denk ik. Het programma start en dan moet in binnen dan programma er tekst heensturen (kan dus geen parameter meegeven want daar kan ie niks mee). In basic enzo dan kun je met SendKeys nog wel een eind komen. Dit is een functie die direct toetsaanslagen naar een window name kan sturen.

Kan ik met perl ook zoiets iets doen ? Of kan iemand me een hint geven ?

Als het dus niet kan scrijf ik gewoon een heel klein vb of c programma wat het voor me doet en die call ik dan wel vanuit perl maar liefst doe ik het meteen vanuit Perl.

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 18-08 22:36
Je kan eens proberen een filedescriptor te openen waarbij je dat programma uitvoert :
code:
1
open FILEHANDLE, &quot;|programma&quot;

waarna je je commandos kunt sturen met
code:
1
print FILEHANDLE &quot;commando&quot;

Je moet zelf ff kijken waar comma's moeten staan, mijn Perl bijbel ligt op het werk.

Verwijderd

Topicstarter
Op zaterdag 27 juli 2002 23:50 schreef windancer het volgende:
Je kan eens proberen een filedescriptor te openen waarbij je dat programma uitvoert :
code:
1
open FILEHANDLE, &quot;|programma&quot;

waarna je je commandos kunt sturen met
code:
1
print FILEHANDLE &quot;commando&quot;

Je moet zelf ff kijken waar comma's moeten staan, mijn Perl bijbel ligt op het werk.
Helaas dat werkt niet. Ik heb inmiddels al even een ander programma gemaakt die het probleem tijdelijk voor me afvangt. Als ik meer bedreven word met Perl pas ik het later nog wel aan. Ik ben een total newbie met Perl dus ik kan mn tijd nu eerst beter even aan de basis besteden.

Verwijderd

Op zondag 28 juli 2002 12:01 schreef smasr het volgende:

[..]

Helaas dat werkt niet. Ik heb inmiddels al even een ander programma gemaakt die het probleem tijdelijk voor me afvangt. Als ik meer bedreven word met Perl pas ik het later nog wel aan. Ik ben een total newbie met Perl dus ik kan mn tijd nu eerst beter even aan de basis besteden.
Je zou de te zenden karakters (incl. enters) ook in een tijdelijk bestand kunnen zetten. Vervolgens zou je het volgende kunnen doen:
code:
1
system(&quot;programma.exe &lt; tijdelijkbestand.txt&quot;);

Als de eerder beschreven pipe niet werkt, zou dit eventueel wel kunnen werken.

Verwijderd

Topicstarter
Op zaterdag 27 juli 2002 23:50 schreef windancer het volgende:
Je kan eens proberen een filedescriptor te openen waarbij je dat programma uitvoert :
code:
1
open FILEHANDLE, &quot;|programma&quot;

waarna je je commandos kunt sturen met
code:
1
print FILEHANDLE &quot;commando&quot;

Je moet zelf ff kijken waar comma's moeten staan, mijn Perl bijbel ligt op het werk.
Hmm ik heb er toch nog s naar gezien en eerst s wat informatie gelezen over schrijven naar handles enne jou tip zit wel in de buurt. Ik had het eerst helemaal fout begrepen.

k heb nu een testje.
code:
1
2
3
4
5
open (whandle, '| c:\prog.exe -verplichte_parameter') || die &quot;$!\n&quot;;
sleep 2;
print whandle, &quot;system&quot;;
sleep 5;
close (whandle) || warn &quot;$!\n&quot;;

Het programma leent zich denk ik niet voor dit soort dingen want hij start wel netjes op maar blijft daarna eeuwig wachten. Ook de perl code dat hij het programma moet afsluiten na bijvoorbeeld 5 seconden doet helemaal niets. Het hele zaakje (inclusief het perl 'dos' boxje) wordt pas beeindigd nadat ik op de prompt van 'prog.exe', "quit" ENTER heb ingetypt.

Verwijderd

Topicstarter
Op zondag 28 juli 2002 21:19 schreef lennert2002 het volgende:

[..]

Je zou de te zenden karakters (incl. enters) ook in een tijdelijk bestand kunnen zetten. Vervolgens zou je het volgende kunnen doen:
code:
1
system(&quot;programma.exe &lt; tijdelijkbestand.txt&quot;);

Als de eerder beschreven pipe niet werkt, zou dit eventueel wel kunnen werken.
Heb ik even gemaakt voor de test, werkt helaas ook niet goed.

Ik heb :
code:
1
2
3
open tmpfile.txt
for iedere lijn in tmpfile.txt do
   system (prog.exe -verplichte_parameter &lt; lijn_uit_tmpfile.txt)

dit start prog.exe niet op en geeft in het perl window meldingen file not found.

Daarna heb ik het nog s anders gedaan:
(even snel neergekrabbeld net als hierboven)
code:
1
system (prog.exe -verplichte_parameter &lt; d:\temp\tmpfile.txt)

Hierbij had ik tmpfile.txt precies gevuld met wat ik normaliter met de hand zou intypen. Eerst had ik 3 regels erin nl:
system
script blaat.script
quit.
Dat gaf een blauw scherm met een uitzonderingfout. Dat is op zich al niet gek want zover was ik nog niet geweest.

Daarna heb ik het herhaald maar nu met alleen erin het keyword system + enter en toen deed t weer helemaal niets.

Ik geef het eerst maar ff op denk ik. Ik heb ook een module gevonden die keyaanslagen kan sturen en venster titles enzo kan lezen ik denk dat ik daar verder mee kom. (k heb geen verstand van modules nog dus dat moet ik binnenkort dan maar ff leren hoe je het moet gebruiken e.d. ik zag wel dat er ook niet echt een simpele readme fiel bijzat, wel source code headerfiles en de hele mikmak (GNU licented)) of iemand moet nog een gouden tip hebben :)
Pagina: 1