Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Mostrar el diálogo de búsqueda en Windows

¿Cómo puedo ejecutar "Buscar" de Windows?

Tienes que usar la función ShellExecuteEx, con el verbo buscar, o sea "Find".

Algo así como:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  pidl: PItemIDList;
  ExecInfo:  TShellExecuteInfo;
begin
  try
    FillChar(ExecInfo, SizeOf(ExecInfo), 0);
    SHGetSpecialFolderLocation(0, CSIDL_PERSONAL, pidl);
    with ExecInfo do
    begin
      cbSize := SizeOf(ExecInfo);
      fMask := SEE_MASK_INVOKEIDLIST;
      lpVerb := 'Find';
      lpIDList := pidl;
    end (*with*);
    ShellExecuteEx(@ExecInfo);
  finally
    CoTaskMemFree(pidl);
  end (*try*);
end (*Button1Click*);

Yo le he puesto que empieze con la carpeta 'mis documentos' por defecto, a lo mejor querrías que empezase en 'Mi PC' o algo por el estilo, mira en la ayuda los valores para los CSIDL o bien mete el nombre de un directorio en el miembro lpDirectory
(en cuyo caso tendrás que quitar fMask).

Como usa las extensiones de Shell, tendrás que añadir a la claúsula Uses las Units ShellAPI y ShlObj, y como usa explícitamente CoTaskMemFree también ActiveX, puede que prefieras instanciar el 'OLE Memory Allocator' por defecto del Shell (con SHGetMalloc) para invocar sus métodos directamente para liberar la memoria que tomas prestada (IMalloc.Free), en ese caso creo que es COMObj la Unit que tienes que añadir.
Responder Con Cita