Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-09-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Diferenciar accesos directos.

Saludos a tod@s. He hecho un explorador para sustituir al de windows, ya que siempre he usado xp y al pasarme a vista no encuentro nunca nada de lo que quiero, así que me acostumbro a usar mi programa que lo puedo usar en todas las plataformas. Pero haciendo el explorador he llegado a un problema. He divido los componentes de los datos en dos: Carpetas y Archivos. Las carpetas las procesa mi programa, y los archivos los ejecuta con shellexecute. Pero hay un programa que abre carpetas, el famoso acceso directo. La solución, abro la carpeta hacia el acceso directo. NO. Error, ya que el acceso directo también puede ir relacionado con un archivo. Conclusión, necesito saber como diferenciar entre un acceso directo de archivo, y uno de carpeta. Y en el segndo caso, como poder saber el camino de la carpeta vinculada.
Responder Con Cita
  #2  
Antiguo 25-09-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 17
TOPX Va camino a la fama
Saludos,

Se puede validar desde la info que extrae el ejemplo en http://delphi.about.com/od/windowssh.../aa072704a.htm
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #3  
Antiguo 25-09-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Da lectura de memoria 0 en la siguiente línea:

Código Delphi [-]
CoCreateInstance(CLSID_ShellLink,
                  nil,
                  CLSCTX_INPROC_SERVER,
                  IShellLink,
                  psl);
 if psl.QueryInterface(IPersistFile, ppf) = 0 then // <----------------
 begin
   MultiByteToWideChar(CP_ACP,
                       MB_PRECOMPOSED,
                       PChar(LinkFileName),
Responder Con Cita
  #4  
Antiguo 26-09-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Con los breakpoints he detectado que el psl es nil, y supongo yo que eso significa que el puntero no tiene dirección de memoria. El problema es que yo nunca he usado IShellLink, intentaré crearlo a ver si funciona pero si no os aviso.
Responder Con Cita
  #5  
Antiguo 27-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 21
cHackAll Va por buen camino
Código Delphi [-]
 if LongBool(GetFileAttributes('C:\Archivos de programa') and $400{FILE_ATTRIBUTE_REPARSE_POINT}) then
  MessageBox(0, 'LNK', nil, 0);
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #6  
Antiguo 27-09-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Y exactamente que hace eso?

Voy a ponerte desde mi punto de vista lo que pienso que hace:

Si coges los atributos de archivos de programa (por qué?) y parte desconocida por mí se genera el mensaje LNK.
Responder Con Cita
  #7  
Antiguo 28-09-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 17
TOPX Va camino a la fama
Cita:
Empezado por rauros Ver Mensaje
El problema es que yo nunca he usado IShellLink
Es cierto, veo que puede que esa interface no aplique en su Win Vista... y como no tengo una instalación de eso por acá cerca, podría Ud. probar:
  1. o con IShellLinkW
    -
  2. o con el IPersistFile.Load que usan en la función GetShellLinkInfo de http://www.informit.com/articles/art...26940&seqNum=4
    -
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #8  
Antiguo 29-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 21
cHackAll Va por buen camino
Cita:
Empezado por rauros Ver Mensaje
Y exactamente que hace eso?

Voy a ponerte desde mi punto de vista lo que pienso que hace:

Si coges los atributos de archivos de programa (por qué?) y parte desconocida por mí se genera el mensaje LNK.
Tienes mucha razón rauros, creo que me falla la "vista" pues no se desde qué momento me convencí que necesitabas reconocer a un "Symbolic Link", en todo caso "edito"

Código Delphi [-]
uses ActiveX, ComObj, ShlObj;
 
function GetShellLinkPath(FileName: string): string;
var ShellLink: IUnknown;
begin
 ShellLink := CreateComObject(CLSID_ShellLink);
 if (ShellLink as IPersistFile).Load(PWideChar(WideString(FileName)), STGM_READ) = 0 then
  begin
   SetLength(FileName, MAX_PATH);
   (ShellLink as IShellLink).GetPath(@FileName[1], MAX_PATH, PWin32FindData(0)^, SLGP_UNCPRIORITY);
   Result := PChar(@FileName[1]);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var FileName: PChar;
begin
 FileName := PChar(GetShellLinkPath('c:\Documents and Settings\666\Desktop\ClubDelphi.lnk'));
 if (FileName <> '') and LongBool(GetFileAttributes(FileName) and FILE_ATTRIBUTE_DIRECTORY) then
  if not SetCurrentDirectory(FileName) then
   MessageBox(Handle, PChar(SysErrorMessage(GetLastError)), nil, MB_ICONERROR);
end;

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
extraer informacion de accesos directos lnk octalh API de Windows 2 22-03-2008 22:12:22
Problema con accesos directos en InstallShield Express 3.5 amadis Varios 0 19-10-2007 23:14:46
Como poner accesos directos en "enviar a" con Inno Setup? Durbed Varios 0 12-01-2007 22:12:34
Creacion de Accesos directos con otros Iconos tango01 Varios 13 13-07-2004 19:21:04


La franja horaria es GMT +2. Ahora son las 19:55:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi