Laden...

Verknüpfung (*.lnk) erstellen

Erstellt von Fabian vor 18 Jahren Letzter Beitrag vor 16 Jahren 14.433 Views
Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren
Verknüpfung (*.lnk) erstellen

Nabend Community,

ich möchte jetzt gerne mittels C# eine Verknüpfung zu einem Programm erstellen. Ich habe gerade etwas länger gegoogelt aber leider noch nichts brauchbares gefunden.

Hat sich damit jemand schon mal beschäftigt? Es geht um das Erstellen, Bearbeiten und Löschen der *.lnk-Dateien.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

K
597 Beiträge seit 2005
vor 18 Jahren

Hi Fabian,

ich hoffe ich werde jetzt nicht gesteinigt wenn ich das jetzt
eifach veröffentliche.
Ich habe das Buch "Das C# Codebook" ISBN:3-8273-2050-X
von Addison-Wesley. Darin ich ein Beispiel wie Verknüpfungen
angelegt werden können.
Das Buch ist sein Geld wert.

Gruß Kostas

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo Kostas,

danke für das Beispiel. Ist ja doch viel komplexer, als ich dachte. Das C# Codebook scheint ja richtig gut zu sein, mit 60 Euro aber doch recht teuer 😦.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

K
597 Beiträge seit 2005
vor 18 Jahren

ja das ist schon teuer. Sicherlich gibt es im Internet noch ein paar Quellen
wo so etwas stehen könnte. Ich habe aus diesem Buch schon manschen
Code brauchen können. Das ist die Investion schon gerechtfertigt.

Es ist sicherlich Altmodisch aber ich halte lieber ein Buch ein der Hand
als ein PDF. 🙂

Gruß Kostas

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Fabian,

Ist ja doch viel komplexer, als ich dachte.

einfacher geht es mit Process.Start von shortcut.exe und den entsprechenden Parametern.

herbivore

564 Beiträge seit 2005
vor 18 Jahren

und wo bekommt man die shortcut.exe her?

I
1.739 Beiträge seit 2005
vor 18 Jahren

Google: Shortcut.exe 1.er Treffer
http://www.winfaq.de/faq_html/tip0338.htm

"SHORTCUT.EXE finden Sie auf der Windows CD im Verzeichnis ADMIN\APPTOOLS\ENVVARS"

564 Beiträge seit 2005
vor 18 Jahren

auf meiner xp pro nicht

2.921 Beiträge seit 2005
vor 18 Jahren
@all

@all:

Viel einfacher geht das mit folgendem Code (Auszug aus MSDN):

Private Declare Function CreateShellLink _
Lib "vb6stkit.dll" _
Alias "fCreateShellLink" _
( _
ByVal lpstrFolderName As String, _
ByVal lpstrLinkName As String, _
ByVal lpstrLinkPath As String, _
ByVal lpstrLinkArguments As String, _
ByVal fPrivate As Long, _
ByVal sParent As String _
) _
As Long

Erklärung der Parameter:
lpstrFolderName
• Gibt den relativen Pfad (ausgehend von sParent) an,

wo die Verknüpfung angelegt werden soll  

• lpstrLinkName
• Gibt den Text an, der unter dem Icon stehen soll
lpstrLinkPath
• Gibt den Pfad und den Namen der Datei an, auf die

die Verknüpfung zeigen soll  

• lpstrLinkArguments
• Gibt die Kommandozeilenparameter an, die angewandt

werden sollen  

• fPrivate
• Gibt an, ob die Verknüpfung für alle oder nur den

aktuellen User sichtbar sein soll  

• sParent
• Gibt den Ausgangsordner für die Operation an, von

dem aus lpstrFolderName arbeitet  

Beispiel für die Verwendung:

Dim lRet As Long
Dim sFolderName As String
Dim sLinkName As String
Dim sLinkPath As String
Dim sLinkArgs As String
Dim fPrivate As Boolean
Dim sParent As String

sLinkName = "Mein Taschenrechner"
sLinkPath = "C:\Winnt\System32\Calc.exe"
sLinkArgs = ""
sParent = "$(Programs)"

' ----------------------------------------------------------
' Verknüpfung auf dem Desktop erstellen:
' ----------------------------------------------------------
sFolderName = "....\desktop"
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

     sLinkArgs, fPrivate, sParent)  

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme (lokal) erstellen:
' ----------------------------------------------------------
sFolderName = "."
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

     sLinkArgs, fPrivate, sParent)  

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme (Alle User) erstellen:
' ----------------------------------------------------------
sFolderName = "."
fPrivate = False
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

     sLinkArgs, fPrivate, sParent)  

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme -AutoStart erstellen:
' ----------------------------------------------------------
sFolderName = ".\AutoStart"
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

     sLinkArgs, fPrivate, sParent)

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

I
1.739 Beiträge seit 2005
vor 18 Jahren

"vb6stkit.dll", dazu müsste man die Dll dann mit ausliefern(Setup, oder per Skript registrieren/oder auf dem Zielsystem vorraussetzen). Die Dll gehört zum Deploymentwizard(Packagemanager) von VS 6.
Wie das Beispiel auch(VB 6.0 - dllimport)

Das Beispiel ist wirklich einfach, einfach ist aber auch die Klasse aus dem C# - Codebook(die ist ja schon so gebrauchsfähig und man sieht was gemacht wird). Von der Verwendung her könnte mans gleich betrachten, in Sachen Einfacheit.
Bei Verwendung der vbstkit.dll muss man halt sicher stellen, dass sich das Ding wohlregistriert irgendwo auf dem System befindet.

2.921 Beiträge seit 2005
vor 18 Jahren

Klar, davon ging ich aus. Das ist auch an der Endung der DLL zu sehen, aber ich gebe zu ich habe nicht überprüft, ob die Datei dabei ist, bin aber auch davon ausgegangen.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

I
1.739 Beiträge seit 2005
vor 18 Jahren

"vb6stkit.dll", ist nicht vorhanden, es sei denn nach der ersten Installation eines VB6-Programms das auch den Packagemanager verwendet(gibt ja bessere Alternativen). Standard bei XP/2000 sind nur die Runtime-dlls für VB5 und 6.
Man muss sich also kümmern, dass das Ding drauf ist/kommt, wenn man die DLL verwenden möchte.

2.921 Beiträge seit 2005
vor 18 Jahren

dann eben so über:

rundll32.exe appwiz.cpl,NewLinkHere <Verzeichnis>

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

I
1.739 Beiträge seit 2005
vor 18 Jahren

gute Lösung, die "rundll32.exe" kann man als gegeben nehmen und das funktioniert in jeder <Sprache¦Script>

80 Beiträge seit 2007
vor 16 Jahren
100. Download

HAHA! 8)
Ich hab den 100. Download... 😁 😁 😁
Ich gratuliere mir! 👅

W
558 Beiträge seit 2006
vor 16 Jahren

Ich mache Verknüpfungen immer mit Hilfe der dll IWshShortcut.

Mit Google findet man Erklärungen dazu.

grüße
webstarg

80 Beiträge seit 2007
vor 16 Jahren

Ich hab sowas auch gesucht und gefunden:


using IWshRuntimeLibrary;

//Noch n bisschen Code

WshShell wsh = new IWshRuntimeLibrary.WshShell();
WshShortcut sc = (WshShortcut)wsh.CreateShortcut(desination);
sc.TargetPath = shortcutLocation;
sc.IconLocation = resPath + "shortcutIcon";
sc.Save();

W
558 Beiträge seit 2006
vor 16 Jahren

Ja, genau.

Benötigt wird noch eine (COM-)Referenz auf Windows Script Host Object Model.

(PS: Artikel auf Codeproject)

mfg
webstarg

M
318 Beiträge seit 2006
vor 16 Jahren

Hallo,

ich bekomme immer eine Exception in der Zeile:

WshShortcut sc = (WshShortcut)wsh.CreateShortcut(desination);

Ich habe als Pfad schon alles probiert was mir so eingefallen ist, z.B


@"C:\TestDatei.xml"

"C:\\TestDatei.xml"

Probiert. Weilder bekomme ich immer folgenden Fehler: Ausnahmefehler aufgetreten. (Ausnahme von HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Bitte um Hilfe.

Vielen Dank im Vorraus

MFG

W
558 Beiträge seit 2006
vor 16 Jahren

Ich sehe da keinen Fehler, es müsste also schon funktionieren.

Was sein könnte: Gibt es diese Datei nicht?

webstarg

57 Beiträge seit 2006
vor 16 Jahren

Gott zum Grusse !!!

DISP_E_EXCEPTION ist eine generische Fehlermeldung des COM-Systems, definiert in winerror.h und hat so ungefähr die Aussagekraft von "Da ist wohl was schiefgegangen ...".
Ich persönlich habe diesen Fehler schon erlebt bei einem COM-Versionskonflikt in Bezug auf scrrun.dll (MS Scripting) und einer fehlgeschlagenen DB-Anmeldung per ODBC (kein Scherz - das Passwort stimmte nicht).
Wenn ich raten müsste, würde ich auf einen Versionskonflikt tippen. Im Laufe der Win-Versionen / SPs / sonstiger Patches hat MS sehr oft am Scripting Host rumgeschraubt. Falls das der Grund ist, sollte Erzeugung per Late Binding helfen.

Frickelistas venceremos !!!

2 + 2 = 5 for large values of 2

M
11 Beiträge seit 2007
vor 16 Jahren

Hallo liebe Leute,

ich nutze auch das Windows Scripting Host zum erstellen einer Verknüpfung.
Jedoch kann ich es überhaupt nicht leiden, ständig die DLL's mit zu schleppen.
Also habe ich die Verknüpfung zur DLL über LateBinding realisiert.
Es sind hier also keinerlei Com-Verweise nötig:

// Erstellen einer Verknüpfung
string PfadVK = "...", NameVK = "...";
string OriginalDateiMitPfad = "...";
object oWS = Activator.CreateInstance(Type.GetTypeFromProgID("WScript.Shell"));                    
object oLink = oWS.GetType().InvokeMember("CreateShortcut", BindingFlags.InvokeMethod, null, oWS, new object[] { PfadVK + NameVK + ".lnk" });
oLink.GetType().InvokeMember("TargetPath", BindingFlags.SetProperty, null, oLink, new object[] { OriginalDateiMitPfad });
oLink.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null, oLink, new object[] { });

Viele Grüße