Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Spider-Net en 19 Mayo 2009, 23:16 pm



Título: Obtener la ruta real de un acceso directo
Publicado por: Spider-Net en 19 Mayo 2009, 23:16 pm
Hola a tod@s. Estoy programando un panel completo para mi NetBook. Ya sabemos que estos cacharritos son muy útiles (al menos para mí). Pero la resolución de 1024x600 deja poquito espacio en el escritorio para colocar iconos y demás así que estoy programando un panel ocultable y personalizable donde poder poner tus propios iconos y demás. Cuando lo termine lo postearé por aquí.

El caso es que he programado un drag&drop sencillo para que cuando arrastres un fichero o directorio desde el explorador de windows al panel automáticamente crea un icono que posee el icono de ese programa y el enlace al mismo (digamos que es un acceso directo desde el programa ejecutado con ShellExecute).

Hasta ahí todo bien, pero me gustaría que si arrastro al panel un acceso directo de Windows en lugar de tomar la ruta de ese acceso directo y su icono, me gustaría tomar el archivo original de modo que si yo tengo en mi escritorio un acceso directo a Dreamweaver en lugar de tomar el icono y enlace de:
C:\Documents And Settings\Usuario\Escritorio\Dreamweaver.Ink
Que obtenga al ruta real de ese acceso y tome el icono y enlace a:
C:\Archivos de Programa\Adobe\DreamWeaver CS3\Dreamweaver.exe

Simplemente quiero saber como obtener la ruta real de un acceso directo, no sé si habrá algún módulo o alguna API que lo haga. He buscado en el foro y en google y la verdad es que no he encontrado nada, sé que el propio CommonDialog si abres un acceso directo con él, automáticamente haya la ruta real del fichero, así que me gustaría poder hacer algo así.

Perdón por enrollarme tanto pero me gusta explicar bien las cosas xDD
Gracias por leer y gracias por ayudarme de antemano.

Un saludo


Título: Re: Obtener la ruta real de un acceso directo
Publicado por: Karcrack en 20 Mayo 2009, 00:15 am
Esta es una función de este proyecto que codeé para el Abril Negro ;):
Citar
[ABRIL NEGRO][MALWARE]Karcrack Ransom (http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negromalwarekarcrack_ransom-t253258.0.html)

Código
  1. '---------------------------------------------------------------------------------------
  2. ' Procedimiento : GetLnkTarget
  3. ' Autor         : Karcrack
  4. ' Fecha         : 28/04/2009
  5. ' Parametro(s)  : sPath -> Ruta del fichero *.lnk
  6. ' Return        : La ruta a la que apunta el fichero *.lnk
  7. '---------------------------------------------------------------------------------------
  8.  
  9. Private Function GetLnkTarget(ByVal sPath As String) As String
  10.    Dim WSH         As Object
  11.    Dim oShellLnk   As Object
  12.  
  13.    Set WSH = CreateObject("WScript.Shell")
  14.    Set oShellLnk = WSH.CreateShortcut(sPath)
  15.  
  16.    GetLnkTarget = oShellLnk.TargetPath
  17.  
  18.    Set WSH = Nothing
  19.    Set oShellLnk = Nothing
  20. End Function

Saludos ;)


Título: Re: Obtener la ruta real de un acceso directo
Publicado por: Novlucker en 20 Mayo 2009, 01:53 am
Bueno, ahora se me ocurren dos maneras, wmi y objshell, pero dejo esta última que son solo un par de líneas  :P

Código
  1. Set Objshell = Createobject("WScript.shell")
  2. Set objLink = Objshell.CreateShortCut(RutaLink)
  3. Msgbox objLink.targetpath
  4. Msgbox objLink.arguments

Con targetpath obtienes la ruta a la que apunta el acceso directo, y con arguments los parámetros que lleva, como ser parámetros que se pasan en el mismo link al ejecutable en cuestión  :P

Por poner un ejemplo, en datos de destino del acceso directo a Nero Express se muestra esto:
"C:\Archivos de programa\Nero\Nero 9\Nero Express\NeroExpress.exe" -ScParameter=30001  /w
Targetpath ... C:\Archivos de programa\Nero\Nero 9\Nero Express\NeroExpress.exe
Arguments ...  -ScParameter=30001  /w

Saludos  ;D



P.D: había dejado este post abierto y veo que Karcrack a publicado practicamente lo mismo, pero bueno, a el le faltan los parametros y no me va eso de estar poniendo nombre/autor a funciones tan sencillas  :rolleyes:


Título: Re: Obtener la ruta real de un acceso directo
Publicado por: Karcrack en 20 Mayo 2009, 15:40 pm
Bueno, esta funcion la he sacado tal cual del "Karcrack Ransom"... No pienses que he puesto los creditos para que no me copien la funcion >:( :¬¬

Bueno, lo de los parametros lo he puesto porque en el K.R no hace falta para cumplir el cometido ;)

Saludos ;D


Título: Re: Obtener la ruta real de un acceso directo
Publicado por: Novlucker en 20 Mayo 2009, 16:03 pm
Ya se, lo decía sin animos de ofender a nadie  ;D
Lo que ocurre es que desde hace algún tiempo veo que son muchos los usuarios (de diversos foros) que crean funciones y les ponen los créditos para que luego se los cite, pero en realidad dichas funciones son fundamentalmente 3 líneas , como sigamos así dentro de un tiempo no se va a poder utilizar tranquilo un Msgbox con 3 tabuladores delante porque alguien más lo va a tener en su función  :xD

Citar
Bueno, lo de los parametros lo he puesto porque en el K.R no hace falta para cumplir el cometido ;)
True, en el tuyo no hace falta ya que listas los archivos recientes  :P , pero de cualquier manera arguments es algo que se olvida siempre al trabajar con accesos directos, se asume destino == targetpath, por eso la aclaración  :P

Saludos


Título: Re: Obtener la ruta real de un acceso directo
Publicado por: Spider-Net en 20 Mayo 2009, 19:47 pm
Muchísimas gracias a ambos por las respuestas. Me habéis ayudado con mi problema y de paso está muy bien eso de sacar los argumentos porque tienes razón en que el acceso directo no siempre es el targetpath sino que a veces también tienen argumentos así que es bueno tenerlo en cuenta.

Pues eso muchas gracias a los dos y cuando termine el programita lo publicaré por aquí para que opinéis ;)

Un saludo.