Avatar billede jih Nybegynder
30. april 2005 - 14:50 Der er 12 kommentarer og
2 løsninger

liste over wmp sange

Hey..

Jeg har tænkt mig at kunne lave en liste over hvad for nogle sange jeg har på min windows media player.. Jeg har fx tænkt på at lave en lille tekstfil, som indeholder alle mine sange (de er alle sammen på windows media player).. Er der en let måde at gøre det på..?

Det kan også gøres på en anden måde:
Jeg har alle disse musikfiler i min musikmappe (med undermapper).. Hvis jeg kunne få en liste over hvad for nogle sange var der, ville det også være nyttigt... det skal være uden sti.. der skal kun stå "Artist - Track" (gør ikke noget om der kommer til at stå ".mp3" eller ".wma" til sidst)..

Er det muligt at lave dette med VB..? Jeg har kendskab til C++ og VB, så hvis det er muligt med et af disse to programmer, ville jeg meget gerne vide hvordan.. :)

På forhånd tak..

// WebPsycho
Avatar billede sjh Nybegynder
01. maj 2005 - 03:13 #1
Hvis jeg forstår dit spørgsmål korket så vil du bare gennem søge efter nogle file-typer..
http://vbnet.mvps.org/code/fileapi/recursivefiles_minimal_multiple.htm
Avatar billede jih Nybegynder
02. maj 2005 - 13:48 #2
ja... det virker fint.. men hvordan får jeg så skrevet det ned til en liste..? Vil gerne have at det står i en tekstfil bagefter (som så automatisk gemmes på skrivebordet)..
Avatar billede martin_moth Mester
02. maj 2005 - 15:05 #3
list1.additem

Derefter looper du igennem alle items i din list, skriver dem til en fil.

Stien til skrivebordet skal du sikkert have via noget API, med mindre du vil skrive den absolutte sti ind (så virker det ikek på en anden PC, som måske har skrivebordet til at ligge under en anden sti, eller hvis en andenbruger logger ind)
Avatar billede martin_moth Mester
02. maj 2005 - 15:11 #4
F.eks.

Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
FindFile pattern, fso.GetFolder(mappe)

Private Sub FindFile(pattern As String, folder As Scripting.folder)
Dim tmpFolder As Scripting.folder
Dim tmpFile As Scripting.File
  If folder.SubFolders.Count > 0 Then
    For Each tmpFolder In folder.SubFolders
      FindFile pattern, tmpFolder
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      If InStr(1, tmpFile.Name, pattern) Then
        list1.additem tmpFile.Path & "\" & tmpFile.Name
      End If
    Next
  End If
End Sub

Så skal du bare have skrevet dem til en fil, og det står f.eks. her http://www.eksperten.dk/spm/252223
Avatar billede jih Nybegynder
03. maj 2005 - 13:09 #5
det siger mig ikke meget... altså.. jeg har brug for en funktion der skriver alle "items" i min list til en tekstfil... og der skal ikke stå stien med... kun det der står efter "\"
Avatar billede martin_moth Mester
03. maj 2005 - 13:43 #6
Hvis du ikke vil have stien (sti = path) med, så skal du ændre

list1.additem tmpFile.Path & "\" & tmpFile.Name

til

list1.additem tmpFile.Name


For at skrive til en fil, looper du over alle items i din list, og skriver hver item til filen, som det er vist i http://www.eksperten.dk/spm/252223
Avatar billede martin_moth Mester
03. maj 2005 - 13:48 #7
Altså - forklaret "helt til bunds":

  Dim Filnummer as Long
  Dim i As long 
  Filnummer = FreeFile
  Open "C:\Fil.txt" For Output As #Filnummer
  For i = 0 To List1.ListCount - 1
    Print #Filnummer, List1.List(i)
  Next i
  close #filnummer
Avatar billede jih Nybegynder
04. maj 2005 - 00:31 #8
ok... men kan du så forklare mig hvordan jeg bruger split funktionen til at dele List1.List(i) op? altså.. vil gerne have at stien står der i selve programmet, men bare ikke i selve tekstfilen... der skal kun stå "/" foran eller den mappe der kommer efter root mappen... fx. "/ensang.mp3" og "/blandet/ensang.wma"..? dvs. at jeg kun vil have at der bliver vist hvad for en mappe filen ligger i (sammen med filnavn selvf.) efter root...
Avatar billede martin_moth Mester
04. maj 2005 - 12:08 #9
Til det ville jeg ikke bruge split, men InStrRev() og Mid() eller right()

Med følgende funktioner kan du dele en hvilken som helst streng op på en hvilken som helst måde:

Len()
Left()
Right()
Mid()
Split()
InStr()
instrrev()
trim()
rtrim()
ltrim()
Avatar billede jih Nybegynder
06. maj 2005 - 00:29 #10
hmm... hvad gør InStrRev()..? den har jeg vist aldrig hørt om før... de andre kender jeg dog, men ved ikke hvordan jeg skal tjekke hvor den sidste skråstreg ligger i strengen...
Avatar billede sjh Nybegynder
06. maj 2005 - 08:17 #11
InStr() søger fra venstre mod højre og InStrRev() søger fra højre mod venstre..

Private Sub Form_Load()
Dim strPath As String
  strPath = "C:\Mappe1\Mappe2\"
 
  MsgBox InStr(strPath, "\")    ' Giver 3
  MsgBox InStrRev(strPath, "\") ' Giver 17
End Sub
Avatar billede jih Nybegynder
06. maj 2005 - 22:07 #12
jamen, hvis jeg nu siger at min musikmappe er følgende:

"C:\Documents and Settings\mitnavn\Dokumenter\Musik\"
og så er undermapperne som flg:
"C:\Documents and Settings\mitnavn\Dokumenter\Musik\Undermappe1\"
"C:\Documents and Settings\mitnavn\Dokumenter\Musik\Undermappe2\"
osv... der ville det nok virke fint..

men hvad nu hvis jeg har flere undermapper? som sådan:
"C:\Documents and Settings\mitnavn\Dokumenter\Musik\Undermappe1\Undermappeigen\"

Hvordan kunne jeg så finde ud af det på en nem måde (hvis muligt?) skal jeg bare fjerne "C:\Documents and Settings\mitnavn\Dokumenter\Musik" fra stien, så det bliver "\Undermappe1\Undermappeigen\" ? hvis ja, hvordan gør jeg så dette..?
Avatar billede sjh Nybegynder
07. maj 2005 - 02:44 #13
' -------------------------------------------- Form1 --------------------------------------------
Option Explicit

Private Const vbDot = 46
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const vbBackslash = "\"
Private Const ALL_FILES = "*.*"

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
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type

Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName 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 lstrlen Lib "kernel32" Alias "lstrlenW" (ByVal lpString As Long) As Long

Private Const CSIDL_DESKTOP As Long = &H0
Private Const CSIDL_DESKTOPDIRECTORY As Long = &H10

Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As Long) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)

Private Sub Form_Load() '<- Når programmet startes
Dim strSkrivebord As String

  strSkrivebord = GetSpecialFolder(Me.hWnd, CSIDL_DESKTOP)
  MsgBox strSkrivebord

  List1.Clear
  Call SearchDirectory(List1, "D:\System\Dokumenter")

End Sub

Public Sub SearchDirectory(objList As Object, strRoot As String, Optional strPath As String = "")
Dim hFile As Long
Dim WFD As WIN32_FIND_DATA
Dim strPathName As String

  If strPath = "" Then
    strRoot = QualifyPath(strRoot)
    strPath = strRoot
  End If

  hFile = FindFirstFile(strPath & ALL_FILES, WFD)
  If hFile <> INVALID_HANDLE_VALUE Then
    Do
      If (WFD.dwFileAttributes And vbDirectory) Then
        If Asc(WFD.cFileName) <> vbDot Then
          strPathName = (strPath & TrimNull(WFD.cFileName) & vbBackslash)
          ' --- Tilføjer til en ListBox ---
          objList.AddItem Mid$(strPathName, Len(strRoot))
          ' -------------------------------
          Call SearchDirectory(objList, strRoot, strPathName)
        End If
      End If
    Loop While FindNextFile(hFile, WFD)
  End If

  Call FindClose(hFile)
End Sub

Public Function GetSpecialFolder(hWnd As Long, CSIDL As Long) As String
Dim pidl As Long
Dim strPath As String
  If SHGetSpecialFolderLocation(hWnd, CSIDL, pidl) = 0 Then
    strPath = Space$(260)
    If SHGetPathFromIDList(ByVal pidl, ByVal strPath) Then
      GetSpecialFolder = TrimNull(strPath)
    End If
  End If
  Call CoTaskMemFree(pidl)
End Function

Private Function QualifyPath(strPath As String) As String
  If Right$(strPath, 1) <> vbBackslash Then
    QualifyPath = (strPath & vbBackslash)
      Else
    QualifyPath = strPath
  End If
End Function

Private Function TrimNull(strPath As String) As String
  TrimNull = Left$(strPath, lstrlen(StrPtr(strPath)))
End Function
' og du er sikker på du har "kendskab til C++" :D
' -------------------------------------------- Form1 --------------------------------------------
Avatar billede jih Nybegynder
07. maj 2005 - 16:42 #14
ja... ved du hvad .. ligemeget.. jeg forstår ikke så meget af det her.. tror bare jeg gør det lette, og tager sjh's første svar, kombineret med martin_moth's første svar.. så sjh hjalp mig med at lave listen, og martin_moth med at gemme til en tekstfil.. jeg deler bare points lige op med jer.. tak for hjælpen.. :)
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