Avatar billede madd Nybegynder
04. juni 2001 - 01:16 Der er 10 kommentarer og
2 løsninger

Resultat fra en exe-fil

Davsen...

Hvordan kan jeg få outputtet af en exe fil ind i en textbox f.eks.

Har prøvet med:
Text1.Text = Shell(\"ping 10.0.0.1\")

Men det giver et eller andet mærkeligt tal... Jeg ville gerne have returneret:

Pinger 10.0.0.1 med 32 byte data:

Svar fra 10.0.0.1: Byte=32 tid=1ms ttl=64

osv. osv. osv.


Men hvordan gøres dette?
Avatar billede joern Nybegynder
04. juni 2001 - 09:23 #1
Indtil de \"eksperter\" der er drevne i API-kald vågner op efter pinsefrokosterne, kan du prøve noget med piping, ping foregår jo også på kommando-niveau.

Kender du at man kan dirigere f.eks. en \"dir\" til printer eller til en fil?

dir > LPT1                dir > data.txt

Med ping må man kunne det samme  ping > pingfil.txt

Med di VB-program kan du så læse tekstfilen der er dannet.

Dim pingdata(20) as string

a=0
Open \"c:\\pingfil.txt\" for input as #1
  do while eof(1)=false
    line input #1, pingdata(a)
    a=a+1
  loop
close #1

Derpå må du med strengkommandoer i VB opdele dine strenge: pingdata(a).

M.v.h.  Jørn
Avatar billede joern Nybegynder
04. juni 2001 - 09:26 #2
Har lige prøvet selv: du kan godt dirigere resultatet af en ping til en ascii-fil.

M.v.h.  Jørn
Avatar billede driis Nybegynder
04. juni 2001 - 13:37 #3
Jørns metode er en udmærket måde at gøre det på, det ville jeg selv have foreslået.
Avatar billede madd Nybegynder
04. juni 2001 - 22:26 #4
Det var bare et eksempel med ping xx.xx.xx

Jeg vil have outputtet fra en hvilken som helst exe fil der bliver exekveret..

Avatar billede johs_j Novice
04. juni 2001 - 22:41 #5
Jeg har prøvet at pinge til en fil efter joern\'s metode, og det går fint når jeg gør det i en DosPrompt.
Jeg har også prøvet at gøre det fra VB med følgende kommando:

shell \"ping xxx.xxx.xxx.xxx > test.txt\"

Det burde så også virke, men filen bliver ikke dannet.
Avatar billede driis Nybegynder
04. juni 2001 - 22:41 #6
Hvis du bruger joerns metode, kan du få lagt dét, en hvilkensomhelst exe fil returnerer ind i en tekstfil, som du derefter kan læse. Jeg kender ingen anden metode.
Avatar billede joern Nybegynder
04. juni 2001 - 23:43 #7
>>Matthias og johs j:

Nylig var en debat her om nødvendigheden af at shell skulle returnere en værdi eller ej.
Jeg lader shell gøre det selv om jeg ikke bruger værdien:

Dim ord As String
Dim x As Long

Private Sub Command1_Click()
  x = Shell(\"c:\\windows\\ping.exe www.eksperten.dk > d:\\pingdata.txt\")
 
  Open \"d:\\pingdata.txt\" For Input As #1
    Do While EOF(1) = False
      Line Input #1, ord
      Label1.Caption = Label1.Caption & ord
    Loop
  Close #1
End Sub

Det er netop afprøvet - det virker med VB5 på Win98 SE.

M.v.h.  Jørn
Avatar billede joern Nybegynder
05. juni 2001 - 00:07 #8
Jeg må korrigere mig selv.  Mens jeg syslede lavede jeg også en batch-fil der udførte ping\'en og jeg kan nu se at det var den der dannede tekst-filen.

Desuden går der jo list tid før alle resultater af ping er tilstede, så jeg har indsat en forsinkelse på 20 sekunder inden filen læses.
Et tekstfelt giver mulighed for at indtaste en URL.

Dim ord As String
Dim x As Long

Private Sub Command1_Click()
  Open \"c:\\pingfil.bat\" For Output As #2
    Print #2, \"c:\\windows\\ping.exe \" & Text1.Text & \" > d:\\pingdata.txt\"
  Close #2
  x = Shell(\"c:\\pingfil.bat\")
End Sub

Private Sub Timer1_Timer()
  \'timeren står på 20000 ms
  Open \"d:\\pingdata.txt\" For Input As #1
    Do While EOF(1) = False
      Line Input #1, ord
      Label1.Caption = Label1.Caption & ord
    Loop
  Close #1
End Sub

Når Matthias vender tilbage må vi høre hvilke filer han ellers gerne vil læse resultater fra.

m.v.h.  Jørn
Avatar billede winkill Nybegynder
05. juni 2001 - 03:26 #9
madd > Jeg ved at ASPExec DLL\'en kan gøre det, men jeg aner ikke hvordan - andet end at det må være gennem WinAPI\'en, men da jeg snart selv skal bruge funktionen, vil jeg nu trykke min næse flad mod skærmen på adressen:

http://msdn.microsoft.com/library/default.asp?PP=/library/toc/psdk/win32/win320-4-4.xml&tocPath=win320-4-4&URL=/library/psdk/psdkref/alphafunc_3bjm.htm
Avatar billede driis Nybegynder
06. juni 2001 - 12:37 #10
Jørn i stedet for en timer, er det vel bedre at gå videre så snart processen, vi åbner er færdig? I de allerfleste tilfælde tager det jo ikke 20 sek. at udføre en ping. Med denne kode går vi videre, så snart BAT filen er færdig:


Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As String
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
End Type
Private Declare Function ShellExecuteEx Lib \"shell32.dll\" Alias \"ShellExecuteExA\" (lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function WaitForSingleObject Lib \"kernel32.dll\" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Dim Go As SHELLEXECUTEINFO
Dim hProcess As Long
Dim Ans As Long
Const WAIT_TIMEOUT = &H102
Const SEE_MASK_NOCLOSEPROCESS = &H40

Private Sub Command1_Click()
  Open \"c:\\pingfil.bat\" For Output As #2
    Print #2, \"c:\\windows\\ping.exe \" & Text1.Text & \" > d:\\pingdata.txt\"
  Close #2
With Go
    .cbSize = Len(Go)
    .fMask = SEE_MASK_NOCLOSEPROCESS
    .hwnd = Me.hwnd
    .lpVerb = \"open\"
    .lpFile = \"c:\\pingfil.bat\"
    .lpParameters = \"\"
    .lpDirectory = \"c:\\\"
    .nShow = 5
End With
Ans = ShellExecuteEx(Go)

If Not Go.hProcess = 0 Then
    Do
        Ans = WaitForSingleObject(Go.hProcess, 0)
        DoEvents
    Loop While Ans = WAIT_TIMEOUT
Else
    MsgBox \"Filen kunne ikke åbnes...\"
    Exit Sub
End If

Open \"c:\\pingdata.txt\" For Input As 1
Do
    Line Input #1, gStr
    Text2.Text = Text2.Text + gStr + vbCrLf
Loop Until EOF(1)

Kill \"c:\\pingdata.txt\"
Kill \"c:\\pingfil.bat\"
Avatar billede driis Nybegynder
06. juni 2001 - 12:39 #11
... man kan evt. sætte Go.nShow = 0 , så bliver vinduet med BAT filen ikke vist på skærmen.
Avatar billede joern Nybegynder
06. juni 2001 - 14:29 #12
>>Driis: Den kode - jeg regner med den er ok - kan bruges også andre steder.
Men Ping (www.jkfsoft.dk) tog faktisk mere end 15 sek. som jeg først havde sat.  Filen blev oprettet straks men indeholdt kun de første linier.

M.v.h.  Jørn
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