Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Crear Grupo en el menú de inicio

Buenas a tod@s los foreros.

Tengo una problema que no consigo solucionar.

Tengo un instalable de mi aplicación realizado con Delphi 7 y quiero crear en Inicio - Todos los programas mi grupo con el nombre de mi aplicación

Me pueden echar un cable?

gracias de antemano
Responder Con Cita
  #2  
Antiguo 03-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Tienes que procurar la ruta del menú de inicio del usuario "en sesión", o la ruta del menú de inicio para "todos los usuarios". Dentro de alguno de esos directorios has de situar las carpetas y accesos directos que consideres necesarios. Adjunto código fuente para obtener la ruta de los dos directorios mencionados.

Código Delphi [-]
unit USpecialFolder;

interface

uses
  Windows;

const
  CSIDL_STARTMENU = $000b;
  CSIDL_COMMON_STARTMENU = $0016;

function GetSpecialFolder(csidl: integer): string;
function SHGetSpecialFolderPath(Handle: HWND; Path:
 PChar; Folder: Integer; Create: Bool): BOOL; stdcall;

implementation

uses
  SysUtils;

function SHGetSpecialFolderPath; external
 'Shell32.dll' Name 'SHGetSpecialFolderPathA';

function GetSpecialFolder(csidl: integer): string;
var
  buffer: array[0..MAX_PATH] of char;
begin
  result := EmptyStr;
  if SHGetSpecialFolderPath(GetActiveWindow(),buffer,csidl,false) = true then
    result := IncludeTrailingPathDelimiter(buffer);
end;

end.

Con esta otra función puedes crear un acceso directo a una carpeta o archivo:

Código Delphi [-]
uses
  ShlObj, ActiveX, ComObj;

(* Basada en codigo de Zarko Gajic:
   http://delphi.about.com/od/windowssh...create_lnk.htm
*)
function AccesoDirecto(nombre, descripcion, directorio, 
 rutaArchivo, argumentos: string): boolean;
resourcestring
  rsExtLnk = '.lnk';
var
   IObject: IUnknown;
   ISLink: IShellLink;
   IPFile: IPersistFile;
   nombreAcceso: WideString;
begin
   IObject := CreateComObject(CLSID_ShellLink);
   ISLink := (IObject as IShellLink);
   IPFile := (IObject as IPersistFile);
   with ISLink do begin
     //SetHotkey();
     SetShowCmd(SW_SHOWNORMAL);
     SetPath(PChar(rutaArchivo));
     SetArguments(PChar(argumentos));
     SetDescription(PChar(descripcion));
     SetWorkingDirectory(PChar(ExtractFilePath(rutaArchivo)));
   end;
   directorio := IncludeTrailingPathDelimiter(directorio);
   nombreAcceso := directorio+nombre+rsExtLnk;
   result := (IPFile.Save(PWChar(nombreAcceso), false) = S_OK);
end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-09-2007 a las 16:34:03.
Responder Con Cita
  #3  
Antiguo 03-09-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Gracias dec, acababa de encontrar algo similiar.

Lo que pasa es que una vez que tengo el path del menú de inicio no consigo crear un grupo y un acceso directo.

Estoy probando con CreateDirectory en esa ruta pero nada.

Algún consejo?
Responder Con Cita
  #4  
Antiguo 03-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

El "grupo" no es más que un directorio... así que habría que ver cómo es que no puedes usar "CreateDirectory()", como pensabas. Respecto del acceso directo... acabo de editar mi anterior mensaje, no sé si te ha dado tiempo a ver la última función que he añadido, que te permitirá crear en un directorio dado (el grupo, el directorio que crees en el menú de inicio) accesos directos a archivos y/o carpetas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 03-09-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
desde luego es curioso lo siguiente:

Código Delphi [-]
 
procedure TForm1.Button1Click(Sender: TObject);
var
   IObject : IUnknown;
   ISLink : IShellLink;
   IPFile : IPersistFile;
   PIDL : PItemIDList;
   InFolder : array[0..MAX_PATH] of Char;
   TargetName : String;
   LinkName : WideString;
   Camino, probando: String;
begin
   TargetName := 'c:\windows\calc.exe';
   {Use TargetName:=ParamStr(0) which
   returns the path and file name of the
   executing program to create a link to your
   Application}
   IObject := CreateComObject(CLSID_ShellLink) ;
   ISLink := IObject as IShellLink;
   IPFile := IObject as IPersistFile;
   with ISLink do
   begin
     SetPath(pChar(TargetName)) ;
     SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ;
   end;
   // if we want to place a link on the Desktop
   SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL) ;
   SHGetPathFromIDList(PIDL, InFolder) ;
   {
    or if we want a link to appear in
    some other, not-so-special, folder:
    InFolder := 'c:\SomeFolder'
   }
//   LinkName := InFolder + '\Delphi Created Link.lnk';
//   IPFile.Save(PWChar(LinkName), false) ;
   SetLength(Camino, MAX_PATH+1);
   SHGetSpecialFolderPath(GetActiveWindow(), PChar(Camino), CSIDL_STARTMENU, False);
   ShowMessage('El menú inicio está en : ' + Camino);
   CreateDirectory(Camino + '\Programas\KK',0);
end;

El showmessage me devuelve bien la ruta pero oh maravilla, el create directory no me crea el puñetero menu
Responder Con Cita
  #6  
Antiguo 03-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No estoy seguro, pero, "CreateDirectory" no crea varios directorios de una vez... puedes probar a usar "ForceDirectories"... Y, por otro lado, al código que copias parece que le falta algo, puesto que trabajas con un acceso directo... pero no es hasta el final que creas el directorio... donde va a ir el acceso directo... pero luego de crear el directorio el código acaba ahí... bueno. Esto es lo de menos.

El caso es que el problema que has topado puede ser el que "CreateDirectory" no puede crear varios directorios a un tiempo. Una solución puede ser la mencionada función "ForceDirectories".
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-09-2007 a las 16:53:53.
Responder Con Cita
  #7  
Antiguo 03-09-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Pero como soy tan burro !!!

a ver, borra lo que he dicho antes.

Si utilizo tu función GetSpecialFolder todo funciona correctamente.

Ale, voy a trastear un poco más.

Mil gracias
Responder Con Cita
  #8  
Antiguo 03-09-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
oye, me puedes poner un ejemplito del uso de la función AccesoDirecto

muchas gracias de antemano
Responder Con Cita
  #9  
Antiguo 03-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Código Delphi [-]
begin
  AccesoDirecto(
    'Bloc de notas',           // Nombre del acceso directo
    'Abre el bloc de notas',   // Descripción (Hint, Tip) del acceso directo
    'C:\',                     // Directorio donde se creará el acceso directo
    'C:\windows\notepad.exe',  // Ruta del archivo a que apuntará el acceso
    ''                         // Argumentos a pasar al archivo (ninguno)
  );
end;

Con lo anterior crearíamos un acceso directo al "Bloc de notas" en la raíz de la unidad "C:\".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



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
Crear un grupo de Forms como Componente RubenWTH OOP 0 22-04-2006 17:17:32
Sustituir el Menú de Inicio de Windows Jonnathan API de Windows 8 23-01-2006 19:48:38
Inactivar el menú inicio diegofhernando Varios 21 16-01-2005 16:12:53
Como imprimir totales de un grupo en el encabezado del grupo y no en el pie de grupo HombreSigma Impresión 1 07-10-2003 08:29:25
Arrancar un programa, desde menú inicio, cuando yo quiera. Tonio Varios 3 17-09-2003 04:31:19


La franja horaria es GMT +2. Ahora son las 00:03:13.


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