|  | 
 
 | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Пару вопросов Здравствуйте уважаемые программисты. Создавать несколько тем не буду, но задам ряд вопросов, по которым прошу ответить. Вот ряд вопросов: 1. Как открыть "Мой Компьютер" допустим через кнопку; 2. -|-|- "Мои Документы" -|-|- 3. -|-|- "Рабочий Стол" -|-|- (в виде папки) 4. Придать в Popup Menu у любых файлов. Например при клике на файл правой кнопки мыши там в списке есть Метка моей программы. При выборе (клике на неё) откывалось бы мне нужное окно и там можно было бы выполнить нужное мне действие с файлом выбранного из SubMenu из списка. (К примеру Unlocker - кто знает)... Некоторые вопросы не по теме но все-равно прошу ответить! Заранее спасибо! | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   1,2,3 - Что занчит "открыть". 4. ShellExtention. пример можно глянуть в демосах Дельфей. | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Вот то и значит: Открыть. Вы никогда не открывали "Мой Компьютер" например? или "Мои Документы"? вот надо осуществить то же открытие только программно... | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   Не надо наглеть. Это во первых. Через SHGetSpecialFolder получаешь путь и через ShellExecute открываешь. | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 и два: по поводу ShellExecute - путь на всех машинах разный, взависимости от имени пользователя и диск на котором установлен Windows... про SHGetSpecialFolder не слышал вовсе и какие параметры и как работает представления не имею.. | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   а win32 хелп посмотреть не судьба? на крайний случай www.msdn.com Вот этот юнит был написн в свое время минут за 15 по msdn: Код: unit SysFolders;
interface
uses Windows, SysUtils, ShlObj;
function GetUserAppDataFolderPath : String;
function GetUserMyDocumentsFolderPath : String;
function GetUserFavoritesFolderPath : String;
function GetCommonAppDataFolderPath : String;
function GetWindowsFolerPath : String;
function GetTempFolderPath : String;
implementation
const
  {$EXTERNALSYM CSIDL_COMMON_APPDATA}
  CSIDL_COMMON_APPDATA = $0023;
function GetSpecialFolderPath(CSIDL : Integer) : String;
var
  Path : PChar;
begin
  Result := '';
  GetMem(Path,MAX_PATH);
  Try
    If Not SHGetSpecialFolderPath(0,Path,CSIDL,False) Then
      Raise Exception.Create('Shell function SHGetSpecialFolderPath fails.');
    Result := Trim(StrPas(Path));
    If Result = '' Then
      Raise Exception.Create('Shell function SHGetSpecialFolderPath return an empty string.');
    Result := IncludeTrailingPathDelimiter(Result);
  Finally
    FreeMem(Path,MAX_PATH);
  End;
end;
function GetTempFolderPath : String;
var
  Path : PChar;
begin
  Result := ExtractFilePath(ParamStr(0));
  GetMem(Path,MAX_PATH);
  Try
    If GetTempPath(MAX_PATH,Path) <> 0 Then
      Begin
        Result := Trim(StrPas(Path));
        Result := IncludeTrailingPathDelimiter(Result);
      End;
  Finally
    FreeMem(Path,MAX_PATH);
  End;
end;
function GetWindowsFolerPath : String;
var
  Path : PChar;
begin
  Result := ExtractFilePath(ParamStr(0));
  GetMem(Path,MAX_PATH);
  Try
    If GetWindowsDirectory(Path, MAX_PATH) <> 0 Then
      Begin
        Result := Trim(StrPas(Path));
        Result := IncludeTrailingPathDelimiter(Result);
      End;
  Finally
    FreeMem(Path,MAX_PATH);
  End;
end;
function GetUserAppDataFolderPath : String;
begin
  Result := GetSpecialFolderPath(CSIDL_APPDATA);
end;
function GetUserMyDocumentsFolderPath : String;
begin
  Result := GetSpecialFolderPath(CSIDL_PERSONAL);
end;
function GetUserFavoritesFolderPath : String;
begin
  Result := GetSpecialFolderPath(CSIDL_FAVORITES);
end;
function GetCommonAppDataFolderPath : String;
begin
  Result := GetSpecialFolderPath(CSIDL_COMMON_APPDATA);
end;
end. | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код: uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Application.Handle, Pchar('Open'),
Pchar('программа или объект (CLSID)' ) , Pchar ('параметр') ,
'' ,SW_SHOWNORMAL);
end;
например:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Application.Handle, Pchar('Open'),
Pchar('::{450D8FBA-AD25-11D0-98A8-0800361B1103}' ) , Pchar ('') ,
'' ,SW_SHOWNORMAL);
end;
(открытие моих документов)
или:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Application.Handle, Pchar('Open'),
Pchar('::{20D04FE0-3AEA-1069-A2D8-08002B30309D}' ) , Pchar ('') ,
'' ,SW_SHOWNORMAL);
end;
(открывает Мой компьютер)Последний раз редактировалось Admin, 09.08.2009 в 20:19. | 
| 
			 
			#8  
			
			
			
			
		 | |||
| 
 | |||
|   Еще один вариант реализации функци lmikle <GetSpecialFolderPath> Код: Uses
  ActiveX, ShlObj, ...
...
function Get_Path_To_SpecialFolder(Handle : THandle; CSIDL : cardinal) : string;
//Получить полный путь к соотв.системной папке
//текущего Пользователя Windows.
//Взято с http://www.swissdelphicenter.ch/en/showcode.php?id=233
var
  Allocator: IMalloc;
  SpecialDir: PItemIdList;
  FBuf: array[0..MAX_PATH] of Char;
  PerDir: string;
begin
  Result:='';
  if SHGetMalloc(Allocator) = NOERROR then begin
    SHGetSpecialFolderLocation(Handle, CSIDL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, @FBuf[0]);
    Allocator.Free(SpecialDir);
    Result:=string(FBuf);
  end;
end;А это весь список констант (определен в модуле ShlObj) : Код: CSIDL_DESKTOP = $0000; CSIDL_INTERNET = $0001; CSIDL_PROGRAMS = $0002; CSIDL_CONTROLS = $0003; CSIDL_PRINTERS = $0004; CSIDL_PERSONAL = $0005; //Мои документы CSIDL_FAVORITES = $0006; CSIDL_STARTUP = $0007; CSIDL_RECENT = $0008; CSIDL_SENDTO = $0009; CSIDL_BITBUCKET = $000a; CSIDL_STARTMENU = $000b; CSIDL_DESKTOPDIRECTORY = $0010; CSIDL_DRIVES = $0011; CSIDL_NETWORK = $0012; CSIDL_NETHOOD = $0013; CSIDL_FONTS = $0014; CSIDL_TEMPLATES = $0015; CSIDL_COMMON_STARTMENU = $0016; CSIDL_COMMON_PROGRAMS = $0017; CSIDL_COMMON_STARTUP = $0018; CSIDL_COMMON_DESKTOPDIRECTORY = $0019; CSIDL_APPDATA = $001a; CSIDL_PRINTHOOD = $001b; CSIDL_ALTSTARTUP = $001d; // DBCS CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS CSIDL_COMMON_FAVORITES = $001f; CSIDL_INTERNET_CACHE = $0020; CSIDL_COOKIES = $0021; CSIDL_HISTORY = $0022; | 
| 
			 
			#9  
			
			
			
			
		 | ||||
| 
 | ||||
|   админ, что значит "Admin: Пользуемся тегами! Последний раз редактировалось Admin, 09.08.2009 в 20:19." ? | 
| 
			 
			#10  
			
			
			
			
		 | |||
| 
 | |||
|   Это значит, что код был написан обычным текстом. Модератор исправил это и попросил пользоваться специальными кодами (то бишь тегами) для оформления своих сообщений (для повышения их читабельности и удобства восприятия). Если в дальнейшем пожелания модераторов не будут учтены, то пользователь будет переведен в режим "только чтение". | 
| 
			 
			#11  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Ну, я и не претендовал на непогрешимость. Когда мне потребовалось получить некоторый набор системных папок, я просто сел и написал функцию, которая для меня удобна. Естественно, там далеко не все папки, которые можно вытащить через API. Только те, которые были мне нужны на тот момент. Но если дружить с головой, руками и гуглом, то остальные добавляются очень просто  | 
| 
			 
			#12  
			
			
			
			
		 | |||
| 
 | |||
|   Sorry. Я просто добавил еще один вариант, чтобы вроде как тема была более полная. Вдруг кому-о пригодится. Мало ли. :-) |