SHSetFolderPath CSIDL_DESKTOP & CSIDL_DRIVES

Skalid Messages postés 2 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 17 septembre 2006 - 10 sept. 2006 à 17:23
Skalid Messages postés 2 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 17 septembre 2006 - 17 sept. 2006 à 13:15
Bonjour a tous,

J'ai un bout de code permettant d'expoiter la fonction SHSetFolderPath permet de changer à chaud le chemin des répértoire system.
Il fonctionne tres bien pour changer:
CSIDL_TEMPLATES
CSIDL_FAVORITES
CSIDL_APPDATA
CSIDL_PERSONAL
CSIDL_DESKTOPDIRECTORY
CSIDL_STARTMENU
CSIDL_PROGRAMS

mais impossible de le faire fonctionner avec:
CSIDL_DESKTOP
CSIDL_DRIVES

J'en ai besoin pour changer le chemin du bureau (CSIDL_DESKTOP) sans redamarrer explorer.
Le voici ci-dessous ; Pouvez-vous m'aider ?

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 FLibHandle: THandle;
 path:WideString;
 SHSetFolderPath: FUNCTION (csidl:integer;
 hToken:THANDLE;
 dwFlags: DWORD;
 pszPath: LPCTSTR):HRESULT;stdcall;
begin
  FLibHandle := LoadLibrary('Shell32.dll');
  SHSetFolderPath := GetProcAddress(FLibHandle, pchar(Ord(232)));
  path:='C:\Mon Répertoire';
  if assigned(SHSetFolderPath)
  then try
    if not SUCCEEDED(SHSetFolderPath(CSIDL_FAVORITES, 0, 0, pchar(path)))then beep;
    finally
  end;
  if FLibHandleB <> 0 then FreeLibrary(FLibHandle);
end;

end.

1 réponse

Skalid Messages postés 2 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 17 septembre 2006
17 sept. 2006 à 13:15
Personne ?
0
Rejoignez-nous