usbready todos recuperar programa los ink icono falta extension eliminar directo con celular archivos acceso windows icons shortcut

windows - todos - recuperar archivos lnk



Extraiga el icono del archivo.lnk(acceso directo) de Windows (6)

Este hilo proporciona información interesante sobre los datos contenidos en un archivo .lnk

La función sSHGetFileInfoss debería poder extraer el archivo de icono.

Documentado aquí y utilizado para un archivo lnk:

Path2Link := ''C:/Stuff/TBear S Saver.lnk''; SHGetFileInfo(PChar(Path2Link), 0, ShInfo1, SizeOf(TSHFILEINFO), SHGFI_ICON); // this ShInfo1.hIcon will have the Icon Handle for the Link Icon with // the small ShortCut arrow added}

Desde el primer enlace, podría compilar tal utilidad en c #, donde declararía esta función como:

[DllImport("shell32.dll")] public static extern IntPtr SHGetFileInfo( string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

También podría construir una utilidad en el lenguaje de script autoit , donde usaría esa función declarada así:

Func _ShellGetAssocIcon(Const $szFile,Const $IconFlags = 0) Local $tFileInfo = DllStructCreate($tagSHFILEINFO) If @error Then Return SetError(1,@extended,0) EndIf Local $Ret = DllCall("shell32.dll","int","SHGetFileInfo","str",$szFile,"dword",0, _ "ptr",DllStructGetPtr($tFileInfo),"uint",DllStructGetSize($tFileInfo),"uint",BitOr($SHGFI_ICON,$IconFlags)) MsgBox(0,0,@error) Return DllStructGetData($tFileInfo,"hIcon") EndFunc

Necesito extraer el ícono de un archivo de acceso directo de Windows (.lnk) (o encontrar el archivo de ícono, si el atajo lo señala).

No estoy preguntando sobre la extracción de iconos de exe, dll, etc. El atajo en cuestión se crea cuando ejecuto un programa de instalación. Y el ícono que muestra el acceso directo no está contenido en el .exe al que apunta el acceso directo. Presumiblemente, el icono está incrustado en el archivo .lnk, o el archivo .lnk contiene un puntero al lugar donde vive este ícono. Pero ninguna de las utilidades que he encontrado funciona aborda esto, todos simplemente van al .exe.

¡Muchas gracias!



En 2010, Microsoft finalmente lanzó una especificación oficial del formato de archivo LNK. Es mucho más preciso y detallado que las especificaciones de ingeniería inversa que flotan en la red, por supuesto.

Para mayor completitud, aquí está la descripción de MSDN de enlaces de shell y accesos directos.


Usando el método Shell32 de acceso de enlaces:

String lnkPath = @"C:/Users/PriceR/Desktop/Microsoft Word 2010.lnk"; //--- run microsoft word var shl = new Shell32.Shell(); // Move this to class scope lnkPath = System.IO.Path.GetFullPath(lnkPath); var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath)); var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath)); var lnk = (Shell32.ShellLinkObject)itm.GetLink; //lnk.GetIconLocation(out strIcon); String strIcon; lnk.GetIconLocation(out strIcon); Icon awIcon = Icon.ExtractAssociatedIcon(strIcon); this.button1.Text = ""; this.button1.Image = awIcon.ToBitmap();


Lo uso para obtener el ícono sin el ícono corto de la flecha de acceso directo agregado sobre él como imagen:

using IWshRuntimeLibrary;

Image ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(File)).TargetPath).ToBitmap();

Si desea obtenerlo como un icono en su lugar:

Icon ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(File)).TargetPath);


También puede analizar el archivo .lnk usted mismo, consulte este pdf o este artículo sobre los detalles del formato de archivo de acceso directo.

O puede usar la clase ShellLink mencionada en la respuesta a esta pregunta .