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