... .exe aus inf datei auslesen

Hallo,
also wenn ich z.B. die autorun.inf auslese:
*
[autorun]
icon=addon\data\bitmap\icon.ico
open=start.exe /checksection
*
steht leider open=start.exe bei versch.CD´s mal in der 2.,3.,4.,…Zeile, ausserdem nicht immer start.exe … !

Wie kann man das ganze / bzw. kann man / nur open=start.exe
oder besser name des Startobjektes und .exe auslesen???

Danke für die Mühe

LG
Udu

Hi Udo,

ich verstehe die Frage mal wieder nicht, oder? :wink:

Ich habe das gerade mal getippt:

Private Sub Command1\_Click()
 Datei = "D:\Autorun.inf"
 l = FileLen(Datei)
 Open Datei For Binary As #1
 txt = Input(l, #1)
 Close #1
 pos = InStr(txt, ".exe")
 Do While Zeichen " "
 Zeichen = Mid(txt, pos, 1)
 If Zeichen " " Then
 pos = pos - 1
 n = n + 1
 End If
 Loop
 prg = Mid(txt, pos, n + 4)
 Label1.Caption = prg
End Sub

Das läuft ohne Probleme, aber das ist irgendwie zu leicht, das kann nicht Deine Frage gewesen sein. Hast Du’s mal genauer?

Gruß, Rainer

Laufzeitfehler 5 …
Hallo,
geht nix, laufzeit 5

erklärbär:
Na ich müsste einfach mal wissen, mit welchem Programm die CD gestartet wird… und wollte das über die inf auslesen, das ja dort drin steht …

Weil jede cd mit einem anderen Programm startet …!

Prob. ist nur, das automatisch - ohne Benutzer rauszufinden - zu starten

(also einfach - man baue ein programm das egal welche cd es ist, in einem textfeld das startprogramm (name.exe) steht…

LG
Udo

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

PS:
PS:
aber nur (name.exe)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

also wenn es darum geht Infos spez. aus der autorun.inf Datei auszulesen, kann man sich der API-Funktionen fuer die ini-files bedienen, da der Aufbau der autorun.inf das gleiche ist wie dir guten alten INI-Files.

Dazu gibt es :
Declare Function alias_GetPrivateProfileString Lib „Kernel“_
Alias „GetPrivateProfileString“_
(ByVal lpapplicationname as string, _
ByVal lpkeyname as String, _
ByVal lpDefault as String
ByVal lpreturnedstring as String, _
ByVal nSize as Integer,
ByVal lpfilename as String) as Integer

lpapplicationname = section ([autorun])
lpkeyname = key (open)
lpDefault = vorgabe falls nicht gefunden
lpreturnedstring = gelesener Wert
nSize = Groesse von lpreturnedstring
lpfilename = dateiname (autorun.inf)

Dann ist es sch… egal wo der Eintrag in der Datei steht.

Hope this helps
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

geht nix, laufzeit 5

das verstehe ich nicht, den Code habe ich nach dem Testen aus VB kopiert. Stimmt der Laufwerksbuchstabe? Liegt eine CD im Laufwerk, die eine ‚autrun.inf‘ hat?

erklärbär:
Na ich müsste einfach mal wissen, mit welchem Programm die CD
gestartet wird… und wollte das über die inf auslesen, das ja
dort drin steht …

Weil jede cd mit einem anderen Programm startet …!

Prob. ist nur, das automatisch - ohne Benutzer rauszufinden -
zu starten

(also einfach - man baue ein programm das egal welche cd es
ist, in einem textfeld das startprogramm (name.exe) steht…

ja, hab ich so. Nur ‚Name.exe‘ Muß das Programm eventuell erst noch das Laufwerk ermitteln?

Gruß, Rainer

Hallo Udo,

ich habe das mal erweitert. :wink:

Zum Test öffnest Du ein neues Projekt in VB6, löschst alles, was da an Code drin steht und fügst das hier ein:

Option Explicit

Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private Sub Form\_Paint()
 Dim LDs As Long, Cnt As Long, sDrives As String, i As Integer, lw As String
 LDs = GetLogicalDrives
 sDrives = ""
 For Cnt = 0 To 25
 If (LDs And 2 ^ Cnt) 0 Then
 sDrives = sDrives + Chr$(65 + Cnt)
 End If
 Next Cnt

 For i = 1 To Len(sDrives)
 lw = Mid(sDrives, i, 1) & ":\"
 Me.Print lw & " ";
 Select Case GetDriveType(lw)
 Case 2
 Me.Print "Removable"
 Case 3
 Me.Print "Drive Fixed"
 Case Is = 4
 Me.Print "Remote"
 Case Is = 5
 Me.Print "Cd-Rom";
 If PathFileExists(lw & "autorun.inf") Then
 Me.Print "CD mit Autorun ist eingelegt, Programmname: ";
 CD lw
 Else
 Me.Print "CD mit Autorun ist nicht eingelegt"
 End If
 Case Is = 6
 Me.Print "Ram disk"
 Case Else
 Me.Print "Unrecognized"
 End Select
 Next
End Sub

Private Sub CD(Laufwerk)
 Dim Datei As String, l As Integer, txt As String, pos As Integer, n As Integer, prg As String, Zeichen As String
 Datei = Laufwerk & "autorun.inf"
 l = FileLen(Datei)
 Open Datei For Binary As #1
 txt = Input(l, #1)
 Close #1
 pos = InStr(txt, ".exe")
 Do While Zeichen " "
 Zeichen = Mid(txt, pos, 1)
 If Zeichen " " Then
 pos = pos - 1
 n = n + 1
 End If
 Loop
 prg = Mid(txt, pos, n + 4)
 Me.Print prg
End Sub

‚Copy and paste‘ funktioniert bei mir nicht, Du wirst es Zeilenweise kopieren müssen. ;-( Pass auf die 'End Sub’s auf, da passieren leicht Fehler.

Nach dem Start, sollte auf der Form etwas über deine Laufwerke stehen. Liegt in einem Davon eine CD, dann staht auch das da. Gibt es auf der eine Autorun.inf steht auch der Name des Programms da, das gestartet wird.

Gruß, Rainer
PS. das Programm ist getestet und läuft bei mir fehlerfrei.

laufzeit 5 ‚Zeichen = Mid(txt, pos, 1)‘
Hallo, die Zeile
Zeichen = Mid(txt, pos, 1)
verursacht laufzeitfehler 5

angezeigt werde c, d, = Drive fixed und e: cd mit autorun eingelegt, Programmname:

und leider der name nicht…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ja, laufwerksbuchstabe hab ich umgeschrieben, autocd ist drin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

die Zeile
Zeichen = Mid(txt, pos, 1)
verursacht laufzeitfehler 5

angezeigt werde c, d, = Drive fixed und e: cd mit autorun
eingelegt, Programmname:

und leider der name nicht…

das ist ja seltsam. Setz doch mel eine Stoppunkt und erzähl mir mal was in txt und pos steht. Helfen werde ich wohl nicht können, der MID()-Befehl sollte schon funktionieren … Eventuell stehen in der Autorun.inf Zeichen, die nicht gelesen werden können? Wir könnten einen Umweg versuchen, der mir in solchen Fällen schon geholfen hat. Hast Du in Deiner VB-Version die Richtextbox?
Ich bau das Programm mal unter Verwendung der Richtextbox um, davon müßtest Du dann eine unsichtbar auf die Form legen.

Private Sub CD(Laufwerk)
Dim Datei As String, l As Integer, txt As String, pos As Integer, n As Integer, prg As String, Zeichen As String
 Datei = Laufwerk & "autorun.inf"
**RichTextBox1.FileName = Datei  
 txt = RichTextBox1.Text**  
 pos = InStr(txt, ".exe")
 Do While Zeichen " "
 Zeichen = Mid(txt, pos, 1)
 If Zeichen " " Then
 pos = pos - 1
 n = n + 1
 End If
 Loop
 prg = Mid(txt, pos, n + 4)
Me.Print prg
End Sub

nur der fette Teil ist geändert. Das hilft nur, wenn ich txt vorher Unfug stand.

Gruß, Rainer

hallo,
habe mehrere cd s getestet

Haltepunkt … =leeres Form

brauch ich da irgend e. Verweis … ?
schicks doch mal per Mail … [email protected]

Hallo,

die Zeile
Zeichen = Mid(txt, pos, 1)
verursacht laufzeitfehler 5

angezeigt werde c, d, = Drive fixed und e: cd mit autorun
eingelegt, Programmname:

und leider der name nicht…

das ist ja seltsam. Setz doch mel eine Stoppunkt und erzähl
mir mal was in txt und pos steht. Helfen werde ich wohl nicht
können, der MID()-Befehl sollte schon funktionieren …
Eventuell stehen in der Autorun.inf Zeichen, die nicht gelesen
werden können? Wir könnten einen Umweg versuchen, der mir in
solchen Fällen schon geholfen hat. Hast Du in Deiner
VB-Version die Richtextbox?

VB6 na klar

Ich bau das Programm mal unter Verwendung der Richtextbox um,
davon müßtest Du dann eine unsichtbar auf die Form legen.

Private Sub CD(Laufwerk)
Dim Datei As String, l As Integer, txt As String, pos As
Integer, n As Integer, prg As String, Zeichen As String
Datei = Laufwerk & „autorun.inf“
RichTextBox1.FileName = Datei
txt = RichTextBox1.Text

pos = InStr(txt, „.exe“)
Do While Zeichen " "
Zeichen = Mid(txt, pos, 1)
If Zeichen " " Then
pos = pos - 1
n = n + 1
End If
Loop
prg = Mid(txt, pos, n + 4)
Me.Print prg
End Sub

nur der fette Teil ist geändert. Das hilft nur, wenn ich txt
vorher Unfug stand.

Gruß, Rainer

Du hast Post
Hi Udo,

habe mehrere cd s getestet

ich habe die ‚Partition Magic 5‘ genommen. Klappt einwandfrei.

Haltepunkt … =leeres Form

Seltsam … das wird doch nicht am BS liegen? Ich habe w2k.

brauch ich da irgend e. Verweis … ?

Nein, ich habe extra die Standardversion genommen, damit es keine Probleme gibt, weil ich die Enterprise verwende und dann eventuell Funktionen verwende, die nicht jeder hat.

schicks doch mal per Mail

Das habe ich gerade gemacht. :wink:

Gruß, Rainer

du auch…
hallo,

Hi Udo,

habe mehrere cd s getestet

ich habe die ‚Partition Magic 5‘ genommen. Klappt einwandfrei.

Haltepunkt … =leeres Form

Seltsam … das wird doch nicht am BS liegen? Ich habe w2k.

Ich XP

brauch ich da irgend e. Verweis … ?

Nein, ich habe extra die Standardversion genommen, damit es
keine Probleme gibt, weil ich die Enterprise verwende und dann
eventuell Funktionen verwende, die nicht jeder hat.

schicks doch mal per Mail

Das habe ich gerade gemacht. :wink:

Gruß, Rainer

Endergebnis - Autostart Datei finden
Hallo,

nur der Vollständigkeit halber noch der fertige Code, falls das noch mal jemand braucht.

Option Explicit
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Private Sub Form\_Paint()
 Dim LDs As Long, Cnt As Long, sDrives As String, i As Integer, lw As String
 LDs = GetLogicalDrives
 sDrives = ""
 For Cnt = 0 To 25
 If (LDs And 2 ^ Cnt) 0 Then
 sDrives = sDrives + Chr$(65 + Cnt)
 End If
 Next Cnt
 For i = 1 To Len(sDrives)
 lw = Mid(sDrives, i, 1) & ":\"
 Me.Print lw & " ";
 Select Case GetDriveType(lw)
 Case 2
 Me.Print "Removable"
 Case 3
 Me.Print "Drive Fixed"
 Case Is = 4
 Me.Print "Remote"
 Case Is = 5
 Me.Print "Cd-Rom";
 If PathFileExists(lw & "autorun.inf") Then
 Me.Print " : CD mit Autorun ist eingelegt, Programmname: ";
 CD lw
 Else
 Me.Print " : CD mit Autorun ist nicht eingelegt"
 End If
 Case Is = 6
 Me.Print "Ram disk"
 Case Else
 Me.Print "Unrecognized"
 End Select
 Next
End Sub

Private Sub CD(Laufwerk)
Dim Datei As String, l As Integer, txt As String, pos As Integer, n As Integer, prg As String, Zeichen As String
 Datei = Laufwerk & "autorun.inf"
 RichTextBox1.FileName = Datei
 txt = RichTextBox1.Text
 pos = InStr(txt, ".exe")
 Do While Zeichen " " And Zeichen "="
 Zeichen = Mid(txt, pos, 1)
 If Zeichen " " And Zeichen "=" Then
 pos = pos - 1
 n = n + 1
 End If
 Loop
 prg = Mid(txt, pos + 1, n + 3)
Me.Print prg
End Sub

Gruß, Rainer