Da die Funktion
SelectDirectory() schon recht alt ist sollte man lieber auf
SHGetSpecialFolderLocation() zurückgreifen.
Delphi-Quellcode:
implementation
{$R *.dfm}
uses
ShellAPI, ShlObj;
var
ExecAppPath: string;
function OpenFolder(root: Integer = 0; Caption: string = ''): string;
var
bi: TBrowseInfo;
lpBuffer: PChar;
pidlPrograms, pidlBrowse: PItemIDList;
begin
if (not SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow, root,
pidlPrograms))) then
exit;
lpBuffer := StrAlloc(MAX_PATH);
bi.hwndOwner := GetActiveWindow;
bi.pidlRoot := pidlPrograms;
bi.pszDisplayName := lpBuffer;
bi.lpszTitle := PChar(Caption);
bi.ulFlags := BIF_RETURNONLYFSDIRS;
bi.lpfn := nil;
bi.lParam := 0;
pidlBrowse := SHBrowseForFolder(bi);
if (pidlBrowse <> nil) then
if SHGetPathFromIDList(pidlBrowse, lpBuffer) then
Result := lpBuffer;
StrDispose(lpBuffer);
end;
procedure RunExternalApplication(ApplicationPath, ApplicationName, Parameters: string);
var
ExecError: integer;
begin
ExecError := ShellExecute(
Application.Handle,
'open',
PCHAR(ApplicationName),
PCHAR(Parameters),
PCHAR(ApplicationPath),
SW_NORMAL);
if ExecError <= 32 then
ShowMessage(format('Fehler beim starten von "%s"'#13'Fehlernummer: %d', [ApplicationName, ExecError]));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ExecAppPath = '' then
ExecAppPath := OpenFolder;
if ExecAppPath <> '' then
RunExternalApplication(ExecAppPath, 'nuppsy.exe', '');
end;
end.
Da heute Sonntag ist mach ich mal Ausnahmsweise
kein kleines Codebeispiel.