Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2008, 21:12
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию Пару вопросов

Здравствуйте уважаемые программисты. Создавать несколько тем не буду, но задам ряд вопросов, по которым прошу ответить. Вот ряд вопросов:

1. Как открыть "Мой Компьютер" допустим через кнопку;
2. -|-|- "Мои Документы" -|-|-
3. -|-|- "Рабочий Стол" -|-|- (в виде папки)
4. Придать в Popup Menu у любых файлов. Например при клике на файл правой кнопки мыши там в списке есть Метка моей программы. При выборе (клике на неё) откывалось бы мне нужное окно и там можно было бы выполнить нужное мне действие с файлом выбранного из SubMenu из списка. (К примеру Unlocker - кто знает)...

Некоторые вопросы не по теме но все-равно прошу ответить! Заранее спасибо!
Ответить с цитированием
  #2  
Старый 08.09.2008, 21:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1,2,3 - Что занчит "открыть".
4. ShellExtention. пример можно глянуть в демосах Дельфей.
Ответить с цитированием
  #3  
Старый 08.09.2008, 22:02
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

Цитата:
Сообщение от lmikle
1,2,3 - Что занчит "открыть".

Вот то и значит: Открыть. Вы никогда не открывали "Мой Компьютер" например? или "Мои Документы"? вот надо осуществить то же открытие только программно...
Ответить с цитированием
  #4  
Старый 08.09.2008, 22:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не надо наглеть. Это во первых.
Через SHGetSpecialFolder получаешь путь и через ShellExecute открываешь.
Ответить с цитированием
  #5  
Старый 08.09.2008, 23:19
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

Цитата:
Сообщение от lmikle
Не надо наглеть. Это во первых.
Через SHGetSpecialFolder получаешь путь и через ShellExecute открываешь.
Никто не наглеет - это раз.

и два: по поводу ShellExecute - путь на всех машинах разный, взависимости от имени пользователя и диск на котором установлен Windows...

про SHGetSpecialFolder не слышал вовсе и какие параметры и как работает представления не имею..
Ответить с цитированием
  #6  
Старый 08.09.2008, 23:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а 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  
Старый 09.08.2009, 18:45
Аватар для Hacker
Hacker Hacker вне форума
Прохожий
 
Регистрация: 09.08.2009
Адрес: Россия, Москва
Сообщения: 11
Репутация: 6
По умолчанию

Код:
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: Пользуемся тегами!

Последний раз редактировалось Admin, 09.08.2009 в 20:19.
Ответить с цитированием
  #8  
Старый 10.08.2009, 18:54
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Еще один вариант реализации функци 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  
Старый 11.08.2009, 23:44
Аватар для Hacker
Hacker Hacker вне форума
Прохожий
 
Регистрация: 09.08.2009
Адрес: Россия, Москва
Сообщения: 11
Репутация: 6
По умолчанию

админ, что значит "Admin: Пользуемся тегами!
Последний раз редактировалось Admin, 09.08.2009 в 20:19." ?
Ответить с цитированием
  #10  
Старый 12.08.2009, 00:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Это значит, что код был написан обычным текстом. Модератор исправил это и попросил пользоваться специальными кодами (то бишь тегами) для оформления своих сообщений (для повышения их читабельности и удобства восприятия). Если в дальнейшем пожелания модераторов не будут учтены, то пользователь будет переведен в режим "только чтение".
Ответить с цитированием
  #11  
Старый 12.08.2009, 00:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от roamer
Еще один вариант реализации функци lmikle <GetSpecialFolderPath>
<skip>

Ну, я и не претендовал на непогрешимость. Когда мне потребовалось получить некоторый набор системных папок, я просто сел и написал функцию, которая для меня удобна. Естественно, там далеко не все папки, которые можно вытащить через API. Только те, которые были мне нужны на тот момент. Но если дружить с головой, руками и гуглом, то остальные добавляются очень просто
Ответить с цитированием
  #12  
Старый 12.08.2009, 09:09
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Sorry.
Я просто добавил еще один вариант, чтобы вроде как тема была более полная. Вдруг кому-о пригодится. Мало ли.
:-)
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter