Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Abrir carpetas especiales de Windows - Panel de control, Favoritos, Impresoras - Delphi
Lenguaje de programación Borland Delphi


Este truco permite abrir la carpeta 'Panel de Control' de Windows. Con el mismo código se pueden abrir el resto de carpetas especiales de Windows (papelera de reciclaje, impresoras, Menú de inicio, favoritos, archivos temporales de Internet, escritorio, documentos recientes, carpetas de red, carpeta de fuentes, etc).

Cada carpeta tiene un identificador único que la diferencia de las demás, la abriremos utilizando la función ShellExecuteEx. Esta función del API de Windows permite abrir una carpeta conociendo su identificador (PIDL).

Puesto que esta función es del API de Windows, añadiremos una referencia a ShellApi y aShlObj en la cláusula USES del formulario (TForm) o unidad (Unit) donde vayamos a utilizar la función.

Añadiremos un formulario a nuestra aplicación, en este formulario añadiremos un TButton (Botón) con el nombre "btEjecutarPanelControl".

El código fuente completo del formulario, para abrir el Panel de control de Windows es el siguiente:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs, StdCtrls,
  shellapi, shlobj;

type
  TForm1 = class(TForm)
    btEjecutarPanelControl: TButton;
    procedure btEjecutarPanelControlClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btEjecutarPanelControlClick(Sender: TObject);
var
  identificadorVentana : PItemIDList;
  informacionObtenida : TShellExecuteInfo;
  punteroInformacionObtenida : PShellExecuteInfo;
begin
  //Obtenemos el PIDL de la carpeta
  SHGetSpecialFolderLocation(Handle,
      CSIDL_CONTROLS, identificadorVentana);
  { Para abrir cualquier otra ventana (papelera de reciclaje,
  impresoras, Menú de inicio, favoritos,
  archivos temporales de Internet, escritorio,
  documentos recientes, carpetas de red, carpeta de fuentes,
  etc, es suficiente con cambiar CSIDL_CONTROLS
  por la correspondiente constante de ventana:
  CSIDL_DESKTOP, CSIDL_INTERNET, CSIDL_PROGRAMS,
  CSIDL_PRINTERS, CSIDL_PERSONAL, CSIDL_FAVORITES,
  CSIDL_STARTUP, CSIDL_RECENT,
  CSIDL_SENDTO, CSIDL_BITBUCKET, CSIDL_STARTMENU,
  CSIDL_DESKTOPDIRECTORY, CSIDL_DRIVES, CSIDL_NETWORK,
  CSIDL_NETHOOD, CSIDL_FONTS, CSIDL_TEMPLATES,
  CSIDL_COMMON_STARTMENU, CSIDL_COMMON_PROGRAMS,
  CSIDL_COMMON_STARTUP, CSIDL_COMMON_DESKTOPDIRECTORY,
  CSIDL_APPDATA, CSIDL_PRINTHOOD,  CSIDL_ALTSTARTUP,
  CSIDL_COMMON_ALTSTARTUP, CSIDL_COMMON_FAVORITES,
  CSIDL_INTERNET_CACHE, CSIDL_COOKIES, CSIDL_HISTORY}

  punteroInformacionObtenida := @informacionObtenida;
  with informacionObtenida do
  begin
    cbSize := SizeOf(informacionObtenida);
    fMask := SEE_MASK_NOCLOSEPROCESS + SEE_MASK_IDLIST;
    wnd := Handle;
    lpVerb := nil;
    lpFile := nil;
    lpParameters := nil;
    lpDirectory := nil;
    nShow := SW_ShowNormal;
    hInstApp := 0;
    lpIDList := identificadorVentana;
  end;
  ShellExecuteEx (punteroInformacionObtenida);
end;


end.




Publicado el: 2003-09-24

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A