[VB6] Symbol für vorhandene Desktop-Symbol ändern

15/09/2010 - 08:20 von Ahmed Martens | Report spam
Hallo Leute,

ich möchte für eine Desktopverknüpfung manuell das Icon àndern?
Die Verknüpfung weißt auf einen Ordner, für den je nach Zustand, ob eine
Datei enthalten ist oder nicht, ein anderes Symbol angezeigt werden
soll. Im Grunde das Papierkorb-Verhalten.

Ein einfaches Kopieren der Verknüpfung führt ja zu einer falschen
Position auf dem Desktop (Dual-Monitor).

Hat jemand einen Vorschlag wie so etwas realisierbar ist?

Danke schon einmal im voraus.

Gruß Ahmed
Antworten bitte nur in der Newsgroup.
 

Lesen sie die antworten

#1 Ahmed Martens
15/09/2010 - 09:56 | Warnen spam
Hallo Leute,

ich habe doch noch die Lösung gefunden.

Die IconID habe ich aus der Shell32.dll ausgelesen. Dabei muss von oben
nach unten gerechnet werden, bzw. die Spalten x 4 + angebrochene
Position.

Mit meiner Methode benötigt man keinen Verweis auf die Shell32.dll.
Möchte man noch mehr lnk-Methoden anwenden, dann ist auf jedenfall unter
Win7 64bit nur der Verweis auf die Dll aus dem Verzeichnis \SysWOW64
möglich.


Und hier mein Code:

If FileExists("L:\SOFTWARE\DokMa\Scanner_Ablage\66\*.*") = True Then
myID = 126
Else
myID = 4
End If

Call ChangeLnk_Icon("Scanner_Ablage.lnk", myID)



Public Sub ChangeLnk_Icon(Name_lnk As String, IconID As Long)

Const DESKTOP = &H10&
Dim objShell As Object
Dim objFolder As Object

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(DESKTOP)

Set objFolderItem = objFolder.ParseName(Name_lnk)
Set objShortcut = objFolderItem.GetLink

'Zàhlweise von oben nach unten


'IconID = 4 => leerer Ordner
' 126 => voller Ordner

objShortcut.SetIconLocation "C:\Windows\system32\SHELL32.dll", IconID
'voll
objShortcut.Save

End Sub


##############################################################################

Und hier noch einmal eine Funktion, wo einmal die Shell.Methoden
dargestellt werden. Ich habe die Funktion nicht getestet.


Option Explicit
'References:
'Microsoft Shell Controls And Automation
'(C:\Windows\System32\Shell32.dll)

Private Const ssfSYSTEM = 37 'System32 directory
Private Const ssfPROGRAMS = 2 'Program Files
Private Const ssfDESKTOP = 0
Private Const ssfDESKTOPDIRECTORY = 16 'Your profile desktop
Private Const ssfDRIVES = 17
Private Const ssfPERSONAL = 5 'My Documents folder
Private Const ssfCOMMONDESKTOPDIR = 25
Private Const ssfWINDOWS = 36 'Windows or Winnt directory

Private Sub Command1_Click()
Dim oShell As Shell32.Shell
Dim oFolder As Shell32.Folder

Set oShell = New Shell32.Shell
Set oFolder = oShell.NameSpace(ssfDESKTOPDIRECTORY)
If (Not oFolder Is Nothing) Then
Dim oFolderItem As Shell32.FolderItem
Dim i As Integer
For i = 1 To oFolder.Items.Count
Debug.Print oFolder.Items.Item(i)
If oFolder.Items.Item(i) = "Form1" Then
Set oFolderItem = oFolder.Items.Item(i)
bFound = True
Exit For
End If
Next

If bFound = False Then Exit Sub
If (Not oFolderItem Is Nothing) Then
Dim oShellLink As ShellLinkObject
Set oShellLink = oFolderItem.GetLink
If (Not oShellLink Is Nothing) Then
Debug.Print oShellLink.Path
Debug.Print oShellLink.Arguments
Debug.Print oShellLink.Description
Debug.Print oShellLink.ShowCommand
End If

Set oShellLink = Nothing
End If
Set oFolderItem = Nothing
End If
Set oFolder = Nothing
Set oShell = Nothing
End Sub


Gruß Ahmed
Antworten bitte nur in der Newsgroup.

Ähnliche fragen