Listbox markierung ausführen

Hallo

Ich habe ein kleines programm jetzt soweit, das es mir nach bestimmten Mp3 Dateien die Festplatte durchsucht, und die gefunden Daten in einer Listbox auflistet ( List1_Click()).
Jetzt möchte ich, wenn ich die entsprechende Datei auswählen, das der Computer mir diese per Knopfdruch mit dem dafür in Windows festgelegten Standardprogramm (winamp) startet.

MFG
Wolflkoder
 
Zuletzt bearbeitet:
Das kannst Du so machen:

Code:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub List1_DoubleClick()
    ShellExecute Me.hwnd, "open", List1.Text, vbNullString, "C:\", SW_SHOWNORMAL
End Sub

Grüsse
ronaldh
 
Danke erst mal, leider kommt bei mir folgender Fehler

Compile error:

Sub or function not defined


ShellExecute <-- wird blau markiert

MFG
Lil - Wolflkoder
 
Zuletzt bearbeitet:
Sehr merkwürdig. Hast Du die Deklaration auch nicht vergessen? Die muss in diesem Fall im Headbereich der Form stehen. Oder, falls Du die Deklaration in ein Modul schreibst, als "Public" deklariert sein.

Das Beispiel ist also so ausgelegt, dass Deklaration und Aufruf sich im selben Modul befinden. Ich habe es eben nochmal ausprobiert (ob vielleicht ein Tippfehler vorliegt), das funktionierte einwandfrei.

Mit welcher Windows-Version arbeitest Du? Aber meiner Meinung nach gibt es die Shell32.dll in jeder Windows-Version.

Mein Beispiel nochmal komplett:

Code:
Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1

Private Sub Command1_Click()
   If List1.ListIndex >= 0 Then
      ShellExecute Me.hwnd, "open", List1.Text, vbNullString, "C:\", SW_SHOWNORMAL
   End If
End Sub

Private Sub Form_Load()
   List1.AddItem "C:\Temp\1.mp3"
   List1.AddItem "C:\Temp\2.mp3"
   List1.AddItem "C:\Temp\3.mp3"
End Sub

Damit wird bei mir der Windows-Mediaplayer geladen, und eine der 3 MP3's abgespielt.

Ansonsten müsstest Du nochmal Deinen ganzen Code posten.

Grüsse
Ronald
 
hallo
nochmal,
hier ist jetzt mein Code.

Darin ist vieles das ich selbst nicht verstehe, hab mir einiges zusammenkopiert. aber soweit funktionierts.


Code:
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpDateiname As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpDateiname As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Const SW_SHOWNORMAL = 1
Const MAX_Ordner = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nDateigroesseHigh As Long
    nDateigroesseLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cDateiname As String * MAX_Ordner
    cAlternate As String * 14
End Type

Function StripNull(OriginalStr As String) As String
    If (InStr(OriginalStr, Chr(0)) > 0) Then
        OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
    End If
    StripNull = OriginalStr
End Function

Function DirScan(Ordner As String, Dateityp As String, Dateizaehler As Long, Ordnerzaehler As Long)
    Dim Dateiname As String
    Dim Ordnername As String
    Dim Ordnernamen() As String
    Dim Ordneranzahl As Long
    Dim i As Integer
    Dim Suche As Long
    Dim WFD As WIN32_FIND_DATA
    Dim Cont As Integer
    If Right(Ordner, 1) <> "\" Then Ordner = Ordner & "\"
    Ordneranzahl = 0
    ReDim Ordnernamen(Ordneranzahl)
    Cont = True
    Suche = FindFirstFile(Ordner & "*", WFD)
    If Suche <> INVALID_HANDLE_VALUE Then
        Do While Cont
        DoEvents
        Ordnername = StripNull(WFD.cDateiname)
        If (Ordnername <> ".") And (Ordnername <> "..") Then
            If GetFileAttributes(Ordner & Ordnername) And FILE_ATTRIBUTE_DIRECTORY Then
                Ordnernamen(Ordneranzahl) = Ordnername
                Ordnerzaehler = Ordnerzaehler + 1
                Ordneranzahl = Ordneranzahl + 1
                ReDim Preserve Ordnernamen(Ordneranzahl)
            End If
        End If
        Cont = FindNextFile(Suche, WFD)
        Loop
        Cont = FindClose(Suche)
    End If
    Suche = FindFirstFile(Ordner & Dateityp, WFD)
    Cont = True
    If Suche <> INVALID_HANDLE_VALUE Then
        While Cont
            Dateiname = StripNull(WFD.cDateiname)
            If (Dateiname <> ".") And (Dateiname <> "..") Then
                DirScan = DirScan + (WFD.nDateigroesseHigh * MAXDWORD) + WFD.nDateigroesseLow
                Dateizaehler = Dateizaehler + 1
                List1.AddItem Ordner & Dateiname
            End If
            Cont = FindNextFile(Suche, WFD)
        Wend
        Cont = FindClose(Suche)
    End If
    If Ordneranzahl > 0 Then
        For i = 0 To Ordneranzahl - 1
            DirScan = DirScan + DirScan(Ordner & Ordnernamen(i) & "\", Dateityp, Dateizaehler, Ordnerzaehler)
        Next i
    End If
End Function

Sub Command1_Click()
    Dim SuchOrdner As String, FindStr As String
    Dim Dateigroesse As Long
    Dim NumFiles As Long, NumDirs As Long
    Screen.MousePointer = vbHourglass
    List1.Clear
    SuchOrdner = Text1.Text
    FindStr = Text2.Text
    
    Dateigroesse = DirScan(SuchOrdner, FindStr, NumFiles, NumDirs)
    Label3.Caption = NumFiles & " Dateien"
    Label4.Caption = NumDirs + 1 & " Ordner"
    Label5.Caption = Format(Dateigroesse, "#,###,###,##0") & " Bytes"
    Screen.MousePointer = vbDefault
    
End Sub

Private Sub Command2_Click()
    Dim strResFolder As String
    strResFolder = BrowseForFolder(hWnd, "Bitte wählen Sie einen Ordner:")
    If strResFolder <> "" Then Text1.Text = strResFolder
End Sub

Private Sub Command3_Click()
If List1.ListIndex >= 0 Then
      ShellExecute Me.hWnd, "open", List1.Text, vbNullString, "C:\", SW_SHOWNORMAL
   End If
   
End Sub
 
Wie schon in meiner letzten Antwort vermutet, hast Du vergessen, die Deklaration für die API-Anweisung mit zu kopieren!

Code:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Das muss zu den anderen Deklarationen in Deiner Form.
 
Hallo

Danke, jetzt ist die Fehlermeldung weg.

wenn ich aber nun das programm starte, es durchsuchen lasse und dann auf irgend eine Datei in der Textbox drücke passiert aber leider nichts.

Nicht in der textbox, und auch nicht über den Button:

Code:
Private Sub Command3_Click()
If List1.ListIndex >= 0 Then
      ShellExecute Me.hWnd, "open", List1.Text, vbNullString, "C:\", SW_SHOWNORMAL
   End If
   
End Sub

kannst du mir hier auch noch weiterhelfen ?
 

Neue Beiträge

Zurück