Imagelist icons /per klick Datei ausführen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von vb2011.

    Imagelist icons /per klick Datei ausführen

    Hallo,

    ich habe folgendes Problem:

    Ich habe hier einen code mit dem mir die Icons (.exe)des Ordners angezeigt werden, dies geht aber ergend wie nicht.
    Icons werden mittels eines Listview ( Imagelist dargestellt )
    Kennt jemand den fehler.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.DrawingPublic Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim dirInfo As DirectoryInfo
    4. Dim fileInfo As FileInfo
    5. Dim exePath As StringDim exeIcon As Icon
    6. dirInfo = New DirectoryInfo("c:\program files\test\")For Each fileInfo In dirInfo.GetFiles
    7. If fileInfo.Extension = String.Empty Then
    8. Else
    9. exePath = GetAssociatedProgram(fileInfo.Extension)
    10. exeIcon = Drawing.Icon.ExtractAssociatedIcon(exePath)
    11. If ImageList1.Images.ContainsKey(exePath) Then
    12. Else
    13. ImageList1.Images.Add(exePath, exeIcon)
    14. End If
    15. ListView1.Items.Add(fileInfo.Name, exePath)
    16. End If
    17. Next
    18. End SubPublic Function GetAssociatedProgram(ByVal FileExtension As _
    19. String) As StringDim objExtReg As Microsoft.Win32.RegistryKey = _
    20. Microsoft.Win32.Registry.ClassesRootDim objAppReg As Microsoft.Win32.RegistryKey = _
    21. Microsoft.Win32.Registry.ClassesRoot
    22. Dim strExtValue As String
    23. TryIf FileExtension.Substring(0, 1) <> "." Then _FileExtension = "." & FileExtension
    24. objExtReg = objExtReg.OpenSubKey(FileExtension.Trim)strExtValue = objExtReg.GetValue("").ToString
    25. objAppReg = objAppReg.OpenSubKey(strExtValue & _
    26. "\shell\open\command")
    27. Dim SplitArray() As StringSplitArray = Split(objAppReg.GetValue(Nothing).ToString, """")
    28. If SplitArray(0).Trim.Length > 0 ThenReturn SplitArray(0).Replace("%1", "")
    29. ElseReturn SplitArray(1).Replace("%1", "")
    30. End If
    31. Catch
    32. Return ""
    33. End TryEnd Function
    34. End Class


    weiteres Problem : beim klicken des icons soll die exe ausgeführt werden.

    ÜBER hilfe bin ich sehr dankbar :)

    GRUß

    Peter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „vb2011“ ()

    besseres script

    Hallo,

    jetzt habe ich schon mal ein besseres und funktionierendes Script, leider habe ich immer noch keine idee wie ich ein click on event mache in einer imagelist.

    Also das wenn man auf das icon in der imagelist klickt die .exe ausgeführt wird. Schon etliches gegoogelt leider kein erfolgt.


    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Public Class Form1
    4. Private listView1 As ListView
    5. Private imageList1 As ImageList
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. ' Initialize the ListView, ImageList and Form.listView1 = New ListView()
    8. imageList1 = New ImageList()listView1.Location = New Point(37, 12)listView1.Size = New Size(161, 242)
    9. listView1.SmallImageList = imageList1
    10. listView1.View = View.SmallIconMe.ClientSize = New System.Drawing.Size(292, 266)
    11. Me.Controls.Add(Me.listView1)
    12. Me.Text = "Form1"
    13. ' Get the c:\ directory.Dim dir As New System.IO.DirectoryInfo("C:\Program Files (x86)\test)Dim item As ListViewItem
    14. listView1.BeginUpdate()
    15. Dim file As System.IO.FileInfoFor Each file In dir.GetFiles()
    16. ' Set a default icon for the file.Dim iconForFile As Icon = SystemIcons.WinLogo
    17. item = New ListViewItem(file.Name, 1)
    18. ' Check to see if the image collection contains an image
    19. ' for this extension, using the extension as a key.
    20. If Not (imageList1.Images.ContainsKey(file.Extension)) Then
    21. ' If not, add the image to the image list.
    22. iconForFile = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName)
    23. imageList1.Images.Add(file.Extension, iconForFile)
    24. End If
    25. item.ImageKey = file.Extension
    26. listView1.Items.Add(item)Next file
    27. listView1.EndUpdate()
    28. End Sub
    29. End Class




    kann mir jemand helfen ? danke schon mal @mono für deinen guten tipp :thumbup:

    Gruß Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb2011“ ()

    Hallo ,
    Das war jetzt genau das was ich gesucht habe , bloß ergend wie bekomme ich es nicht hin das der nicht den button benutzt sondern direkt einen vordifinerten order lädt.

    VB.NET-Quellcode

    1. Private _LastSelectedFolder As String = String.Empty
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickUsing dlg As New FolderBrowserDialog
    3. With dlg
    4. .Description = "Verzeichnis auswhlen..."
    5. .ShowNewFolderButton = False
    6. .SelectedPath = _LastSelectedFolder
    7. .RootFolder = Environment.SpecialFolder.MyComputer
    8. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    9. Try
    10. _LastSelectedFolder = .SelectedPathMe.ShowFileList(.SelectedPath, ListView1, ImageList1)Catch ex As Exception
    11. MessageBox.Show(ex.Message)
    12. End Try
    13. End If
    14. End With
    15. End UsingEnd Sub

    In diesen Bereich müsste warscheinlich die änderung rein ?
    Denke mal über Form1.Load dann

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim dirInfo As DirectoryInfo
    2. Dim fileInfo As FileInfo
    3. Dim exePath As StringDim exeIcon As Icon
    4. dirInfo = New DirectoryInfo("c:\program files\kexxo\")
    5. For Each fileInfo In dirInfo.GetFiles
    6. ListView1.Items.Add(fileInfo.Name, exePath)
    7. End If
    8. NextEnd Sub
    Hat jemand eine Lösung für mein Problem ?

    Noch mal zum Schluss besten Dank an xtts02 für dein echt ,,GEILES,, beispiel projekt das traffs wirklich so was hatte ich gesucht.

    Nur noch ein paar änderungen die wir sicherlich auch hinbekommen und fertig is :)

    Gruß Peter
    Wenn Du das Verzeichnis schon kennst, dann brauchst Du nur die Funktion ShowFileList aufzurufen.
    Beispiel:

    VB.NET-Quellcode

    1. Try
    2. Dim verzeichnis As String = "C:\Test\Verzeichnis"
    3. Me.ShowFileList(verzeichnis, ListView1, ImageList1)
    4. Catch ex As Exception
    5. MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    6. End Try
    Hallo,

    Danke ersteinmal für das toole script, das hat mir bis jetzt sehr geholfen.

    Habe jetzt nur noch ein Problem was ich mir nicht erklären kann :

    Es werden wie hier dargestellt, das erste icon für die .exe für alle gleich verwendet.



    und so soll das eigendlich aussehen :


    Was muss ich nun am Quellcode ändern, damit nicht die icons der ersten zb. exe übernommen werden ?

    Damit es wie im unterem Fenster aussieht.

    Über hilfe wäre ich sehr dankbar. :thumbup:

    Gruß Peter
    In dem Beispiel habe ich das gleiche Icon für alle Dateien mit gleicher Endung genonnen. Für Dokumente würde das noch passen, für die Anwendungen leider nicht mehr - wie Du gezeigt hast.

    Um das Problem zu beheben, könnte man für jede Datei das Icon nehmen.
    Folgende Änderungen muss Du vornehmen.

    Aus dem Beispiel:

    VB.NET-Quellcode

    1. If Not imgList.Images.ContainsKey(locFi.Extension) Then
    2. imgList.Images.Add(locFi.Extension, Icon.ExtractAssociatedIcon(locFi.FullName))
    3. End If
    4. locLtvItem = New ListViewItem(New String() {locFi.Name, _
    5. locFi.Length.ToString("n"), _
    6. locFi.Extension, _
    7. locFi.LastAccessTime.ToString})
    8. locLtvItem.Tag = locFi ' Für spätere Verarbeitung der Datei merken
    9. locLtvItem.ImageKey = locFi.Extension ' Icon zuweisen

    Änderung (in den ersten beiden Zeilen und in der letzten Zeile)

    VB.NET-Quellcode

    1. If Not imgList.Images.ContainsKey(locFi.Name) Then
    2. imgList.Images.Add(locFi.Name, Icon.ExtractAssociatedIcon(locFi.FullName))
    3. End If
    4. locLtvItem = New ListViewItem(New String() {locFi.Name, _
    5. locFi.Length.ToString("n"), _
    6. locFi.Extension, _
    7. locFi.LastAccessTime.ToString})
    8. locLtvItem.Tag = locFi ' Für spätere Verarbeitung der Datei merken
    9. locLtvItem.ImageKey = locFi.Name ' Icon zuweisen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xtts02“ ()