Verknüpfung erstellen scheitert an Shell32

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex2000.

    Verknüpfung erstellen scheitert an Shell32

    Hallo, ich habe ein Problem, und ich weiß echt nicht mehr weiter...


    In einer Funktion (zum erstellen eines Linkes steht folgendes:)

    VB.NET-Quellcode

    1. Dim oShell As New Shell32.Shell
    2. Dim oFolder As Shell32.Folder
    3. Dim oLink As Shell32.ShellLinkObject


    Doch jeweils der Shell32 Teil ist 'nicht definiert'. - also falsch ;(


    Hier die gesamte Funktion:

    VB.NET-Quellcode

    1. Public Function CreateShortcut(ByVal sLinkFile As String, _
    2. ByVal sTargetFile As String, _
    3. Optional ByVal sDescription As String = "", _
    4. Optional ByVal sWorkingDir As String = "") As Boolean
    5. Try
    6. Dim oShell As New Shell32.Shell
    7. Dim oFolder As Shell32.Folder
    8. Dim oLink As Shell32.ShellLinkObject
    9. ' Ordner und Dateinamen extrahieren
    10. Dim sPath As String = sLinkFile.Substring(0, sLinkFile.LastIndexOf("\"))
    11. Dim sFile As String = sLinkFile.Substring(sLinkFile.LastIndexOf("\") + 1)
    12. ' Wichtig! Link-Datei erstellen (0 Bytes)
    13. Dim F As Short = FreeFile()
    14. FileOpen(F, sLinkFile, OpenMode.Output)
    15. FileClose(F)
    16. oFolder = oShell.NameSpace(sPath)
    17. oLink = oFolder.Items.Item(sFile).GetLink
    18. ' Eigenschaften der Verknüpfung
    19. With oLink
    20. If sDescription.Length > 0 Then .Description = sDescription
    21. If sWorkingDir.Length > 0 Then .WorkingDirectory = sWorkingDir
    22. .Path = sTargetFile
    23. ' Verknüpfung speichern
    24. .Save()
    25. End With
    26. ' Objekte zerstören
    27. oLink = Nothing
    28. oFolder = Nothing
    29. oShell = Nothing
    30. Return True
    31. Catch ex As Exception
    32. ' Fehler! ggf. Link-Datei löschen, falls bereit erstellt
    33. If System.IO.File.Exists(sLinkFile) Then Kill(sLinkFile)
    34. Return False
    35. End Try
    36. End Function


    LG, Johnny

    :::

    EDIT: Wer eine einfachere Lösung kennt, eine Verknüpfung zu erstellen; bitte posten :D

    EDIT2: Ich habe Vista Ultimate 64-Bit -> Hat das etwas damit zu tun?
    Also so geht das aber deutlich kürzer:

    1. Du brauchst einen Verweis auf "Windows Script Host Object Model" (ist unter COM)

    2. Und dann diesen Code:

    VB.NET-Quellcode

    1. Dim wsh As IWshRuntimeLibrary.IWshShell = New IWshRuntimeLibrary.WshShellClass()
    2. Dim ShortCut As IWshRuntimeLibrary.IWshShortcut = DirectCast(wsh.CreateShortcut("Dateipfad, wo Verknüpfung erstellt werden soll"), IWshRuntimeLibrary.IWshShortcut)
    3. With ShortCut
    4. .WindowStyle = 1
    5. .TargetPath = "Pfad der Datei"
    6. .WorkingDirectory = "Und hier wird die Datei ausgeführt"
    7. .Save()
    8. End With


    Alteran

    mikeb69 schrieb:

    hast du schonmal daran gedacht einen Verweis auf die Shell32.dll zu setzen ?
    Ich habe direkt nach Public Class

    VB.NET-Quellcode

    1. Inherits Shell32.Shell
    2. Inherits Shell32.Folder
    3. Inherits Shell32.ShellLinkObject

    gesetzt.

    Aber auch das wird als falsch markiert.

    ___________

    Danke Alteran, deinen Post habe ich übersehen.
    @ cpu_johnny: bevor du blind irgend welche code copy&pasta machst, zuerst alles richtig lesen da steht alles deutlich und klar:
    vb@archiv
    Fügen Sie Ihrem Projekt als erstes den COM-Verweis Microsoft Shell Controls And Automation hinzu und übernehmen anschließend nachfolgenden Funktionscode in Ihr Projekt:

    QUELLE

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

    @der_Kurt: danke, hab schon gesehen....habe nur dem threadsteller hingewiesen, nicht nur Code copy&paste sonder lesen was auch geschrieben steht !
    Solche Fragen dürften nicht auftauchen, da steht schon für "*****" alles beschrieben, und trotzdem kommen sie mit vorgekauten Infos nicht klar, oder sehen sie nicht !

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