PDA

Показать полную графическую версию : Открытие папки, "AppData" не зная букву диска


turbolover
16-05-2016, 18:12
Как открыть папку, "AppData" в (Windows7) не-зная букву диска, и не зная имя пользователя.
Скажем так- определить системный диск и имя пользователя переменной, и направить на открытие папки: "AppData".
Стандартный пример скрипта.
unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Self.Handle,'explore','C:\Users\GhostRider\AppData',nil,nil,SW_SHOWNORMAL);
end;

end.
Поправте скрипт если можно.

NickM
16-05-2016, 18:44
turbolover, может так? http://www.oszone.net/3673

turbolover
16-05-2016, 19:11
NickM!
Пример батника интегрированного в Delphi.
program Project1;

uses
Windows, SysUtils;

var
BatchFile: TextFile;
BatchFileName: string;
{$R *.res}

begin
BatchFileName := ExtractFilePath(ParamStr(0)) + 'Test.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
WriteLn(BatchFile,'Start Explorer "%Systemdrive%\Users\%Username%\AppData" & Del %0');
CloseFile(BatchFile);
WinExec('Test.bat',1)
end.

Iska
17-05-2016, 06:13
"%Systemdrive%\Users\%Username%\AppData" »
Вообще-то имелось в виду, например:
%AppData%\..
Особенно надежды, что путь к профилю пользователя всегда содержит папку именно с именем этого пользователя :).

А совсем правильно будет использовать Known Folders (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/bb776911(v=vs.85).aspx).

P.S. И да — никакие «батники» для открытия окна Проводника не нужны в принципе.

opel431
17-05-2016, 23:45
uses ShlObj;

// получить путь к специальным папкам
function GetSpecialFolderPath(folder: integer): string;
const
SHGFP_TYPE_CURRENT = 0;
var
path: array [0 .. MAX_PATH] of char;
begin
if SUCCEEDED(SHGetFolderPath(0, folder, 0, SHGFP_TYPE_CURRENT, @path[0])) then
Result := path
else
Result := '';
end;

procedure TForm2.btn1Click(Sender: TObject);
begin
lbl1.Caption := GetSpecialFolderPath(CSIDL_APPDATA);
end;




© OSzone.net 2001-2012