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
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
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
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
Hallo Fabian,
Ist ja doch viel komplexer, als ich dachte.
einfacher geht es mit Process.Start von shortcut.exe und den entsprechenden Parametern.
herbivore
und wo bekommt man die shortcut.exe her?
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"
auf meiner xp pro nicht
@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.
"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.
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.
"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.
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.
gute Lösung, die "rundll32.exe" kann man als gegeben nehmen und das funktioniert in jeder <Sprache¦Script>
HAHA! 8)
Ich hab den 100. Download... 😁 😁 😁
Ich gratuliere mir! 👅
Ich mache Verknüpfungen immer mit Hilfe der dll IWshShortcut.
Mit Google findet man Erklärungen dazu.
grüße
webstarg
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();
Ja, genau.
Benötigt wird noch eine (COM-)Referenz auf Windows Script Host Object Model.
(PS: Artikel auf Codeproject)
mfg
webstarg
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
Ich sehe da keinen Fehler, es müsste also schon funktionieren.
Was sein könnte: Gibt es diese Datei nicht?
webstarg
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
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