Avatar billede systemnissen Nybegynder
15. oktober 2003 - 16:03 Der er 9 kommentarer og
3 løsninger

Værdi fra eksternt program i VBscript?

Hejsa

Jeg skal køre et script i et meget "spartansk" miljø (ingen HTML, ASP, WMI osv.). Jeg har en .exe fil som viser en listbox hvor man skal vælge en værdi.

.exe filen skal kaldes i scriptet og skal returnere værdien til scriptet. Hvis der fx. vælges "1" i listboxen skal scriptet kunne bruge denne værdi.

Hvordan gør jeg det???

Mvh
Systemnissen
Avatar billede systemnissen Nybegynder
15. oktober 2003 - 16:05 #1
Jeg har forsøgt med:
ENV= WshShell.run("C:\test.exe")
men scriptet venter ikke på værdien...?
Avatar billede nmh Nybegynder
15. oktober 2003 - 16:32 #2
For at overføre en værdi til scriptet må du vist få dit exe program til at starte dit script i en shell.

For du vil vel overføre en værdi på denne måde:

ditscript.vbs abekat

Nu er der overført en parameter med værdien "abekat"
Man kan så læse værdien således:

argCount = WScript.Arguments.Count
msgbox argcount
if argcount>0 then MsgBox WScript.Arguments(0)

men dette ved du måske alt om?
Avatar billede systemnissen Nybegynder
15. oktober 2003 - 16:36 #3
nej, du misforstår (tror jeg)...

Jeg kører et langt script. I dette script kaldes en .exe fil som viser en listbox hvor brugeren skal vælge en værdi. Når brugeren har valgt og trykker ok, skal .exe filen lukkes og returnere den valgte værdi i scriptet.

Gav det mere mening?
Avatar billede Slettet bruger
15. oktober 2003 - 17:01 #4
Nedenstående kan bruge hvad test.exe skriver til stdout.

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("c:\test.exe")

' Status = 0 ... jobbet kører stadig
' Status = 1 ... jobbet er færdigt
Do While oExec.Status = 0
    WScript.Sleep 100
Loop

WScript.Echo oExec.StdOut.ReadAll
Avatar billede nmh Nybegynder
15. oktober 2003 - 17:01 #5
Jo nu forstår jeg, hvad du vil
Hvis du skriver:
ENV= WshShell.run "C:\test.exe",1, True
Så burde dit script vente på, at din exe-fil afslutter.
Jeg kender ikke helt betydningen af parameteren, jge her har sat til 1.
I min kilde står der : [,intWinStyle] for den, og det skulle styre 'window style of program being executed. Optional.'
Avatar billede Slettet bruger
15. oktober 2003 - 17:26 #6
nmh> Du sætter bWaitOnReturn bitten. Run metoden returnere så en error kode, men det giver ikke adgang til hvad test.exe har skrevet til stdout.
Avatar billede systemnissen Nybegynder
15. oktober 2003 - 17:26 #7
jjust: OK, det ser rigtigt ud, men jeg er i tvivl om "stdout". Hvordan sættes den så i min exe fil?? Det er et meget simpelt VB6 program. Jeg går ikke udfra at den blot skal bruges som alm. variabel??

nmh: Det er rigtigt det du skriver, MEN den bruger ikke den valgte værdi i exe filen. Den venter blot på at programmet afsluttes
Avatar billede nmh Nybegynder
15. oktober 2003 - 17:37 #8
Kunne du ikke få din exe-fil (som en nød-løsning), til at skrive den værdi, du vil have overført til en tekstfil, som du så efterfølgende læser fra i dit script?
Avatar billede systemnissen Nybegynder
15. oktober 2003 - 17:45 #9
nmh: Jo det kunne jo blive løsningen, men det kan ikke passe at man ikke kan kalde et program og få den valgte værdi ud, når det afsluttes...
Avatar billede Slettet bruger
15. oktober 2003 - 21:49 #10
Jeg har aldrig kodet andet vb end vbscript...men jeg har søgt rundt omkring på nettet.

Under nedenstående link, fandt jeg at når et visual basic program bliver kørt fra en console (hvilket sker når exec eller run bliver brugt fra et vbscript) så fjernes forbindelsen mellem consollen og programmet. Det betyder at du ikke har en jordisk chance for at returnere noget gennem stdout!

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q171/6/54.asp&NoWebContent=1

I Visual Basic .Net udgaven er det lidt nemmere. Her kan du oprette et "Console Application" project, som ikke mister forbindelsen til den console du starter programmet fra. Derefter kan du skrive til stdout (consollen) via. Console.WriteLine metoden!

Så, kort og godt; Skriv til fil, eller skift sprog!
Avatar billede nmh Nybegynder
15. oktober 2003 - 21:52 #11
Jeg er nået frem til en tilsvarende konklusion, dog uden at finde et link.
Avatar billede systemnissen Nybegynder
15. oktober 2003 - 23:47 #12
Det virker helt vanvittigt... Så må løsningen blive at der skrives til en fil og den derefter læses i scriptet. Jeg kan nemlig ikke bruge .Net frameworket i den console jeg kører det i...

Ærgeligt... men mange tak for hjælpen. Jeg deler 40 point i mellem jer, håber det er ok?

Mvh
Systemnissen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester