Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно открыть "Мой компьютер"? [D7, WinXP]


Страницы:   1 2

gdaujk ©   (2006-12-04 12:09:00) 

Доброго времени суток. Вопрос в теме. Делаю так:

explorer /select, C:\

Подозреваю, что есть другой вариант :-)


TUser   (2006-12-04 18:00:00) [1]

В ХР выполнить команду '...';


Leonid Troyanovsky   (2006-12-04 16:08:00) [2]


> gdaujk ©   (04.12.06 16:00) [19]


Да, только в [16] еще нужно
try ExecPidl finally CoTaskFreeMem

--
Regards, LVT.


gdaujk   (2006-12-04 16:00:00) [3]


> Leonid Troyanovsky ©   (04.12.06 15:53) [18]


Точно:

When using Microsoft Windows 2000 or later, use CoTaskMemFree rather than ILFree. ITEMIDLIST structures are always allocated with the Component Object Model (COM) task allocator on those platforms.

Ещё раз спасибо.


Leonid Troyanovsky   (2006-12-04 15:53:00) [4]


> gdaujk ©   (04.12.06 15:34) [17]

> Самое то, что нужно. Спасибо. Только вопросик: зачем CotaskMemFree?


RTFM: msdn: SHGetSpecialFolderLocation Function

ppidl
[out] A pointer to an item identifier list (PIDL) specifying the folder's location relative to the root of the namespace (the desktop). The calling application is responsible for freeing this pointer with the Shell's IMalloc interface (see SHGetMalloc).

Т.е., IMalloc.Free. Ну, или другим способом, скажем CoTaskMemFree.

--
Regards, LVT.


gdaujk   (2006-12-04 15:34:00) [5]


> Leonid Troyanovsky ©   (04.12.06 15:18) [16]


Самое то, что нужно. Спасибо. Только вопросик: зачем CotaskMemFree?


Leonid Troyanovsky   (2006-12-04 15:18:00) [6]


> gdaujk ©   (04.12.06 14:11) [3]

> Подозреваю, что есть другой вариант: программа XXX, например,
>  тоже запускает Explorer - "Мой компьютер", только C:\  
> не выделяется (как это происходит в выше описанном варианте)


uses shlobj, ActiveX, ShellApi;

procedure ExecPidl(pidl: Pointer; verb: String);
var
 ExeInfo: TShellExecuteInfo;
begin
 FillChar(ExeInfo, SizeOf(ExeInfo), 0);
 with ExeInfo do
 begin
   cbSize := SizeOf(ExeInfo);
   fMask := SEE_MASK_INVOKEIDLIST;
   lpVerb := Pointer(verb);
   nShow := SW_NORMAL;
   lpIdList := pidl;
 end;
 Win32Check(ShellExecuteEx(@ExeInfo));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 pidl: PItemIDList;
begin
 Win32Check(SHGetSpecialFolderLocation(0, CSIDL_DRIVES, pidl) = S_OK);
 ExecPidl(pidl, 'open');
 CotaskMemFree(pidl);
end;

--
Regards, LVT.


zdm   (2006-12-04 15:14:00) [7]


> gdaujk ©   (04.12.06 15:10) [14]

Не заморачивайся, решение предложено нормальное, а уж как там себя ведет вызваный API, да какая разница. ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}'-это ключ реестра, в  HKEY_CLASSESS_ROOT и зарегестрирован системой по умолчанию как "мой комп.", вот ShellExecute и обращается к нему


gdaujk   (2006-12-04 15:10:00) [8]


> Steep ©   (04.12.06 15:02) [12]


Что есть "папку мого компьютера"?


umbra   (2006-12-04 15:09:00) [9]


> '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}'

это моникер (аналог пути к файлу в СОМ). Судя по кол-ву двоеточий (это разделитель частей), он должен состоять из 3-х частей. Две первые не указаны и, наверное, берутся значения по умолчанию. Последняя - это GUID папки "Мои документы". Если поискать это значение в реестре, то можно узнать, что на самом деле открывается файл C:\WINDOWS\web\mycomp.htt


Steep   (2006-12-04 15:02:00) [10]

или попробуй
ShellExecute(Self.Handle,'explore',%systemroot%',nil,nil,SW_SHOWNORMAL);
ps. если получиться токо вместо %systemroot% (системная папка), нужно ввести папку мого компьютера


zdm   (2006-12-04 15:01:00) [11]

запусти regedit-поиск(20D04FE0-3AEA-1069-A2D8-08002B30309D) это и есть "мой комп"


Anatoly Podgoretsky   (2006-12-04 15:01:00) [12]

> gdaujk  (04.12.2006 14:11:03)  [3]

> Вы думаете, что я прямо так и пишу:

Именно так ты и написал.


gdaujk   (2006-12-04 14:57:00) [13]


> zdm ©   (04.12.06 14:54) [7]


Не могли бы вы пояснить, что такое "реестр вызова" ?


gdaujk   (2006-12-04 14:55:00) [14]

>>zdm ©   (04.12.06 14:52) [5]

только так могу предложить, откроется мой комп. но установленый на диск с:\
ShellExecute(Self.Handle,'explore','c:\',nil,nil,SW_SHOWNORMAL);


Ваш вариант просто открывает C:\.


zdm   (2006-12-04 14:54:00) [15]


> gdaujk ©   (04.12.06 14:52) [6]

круто!!! похоже есть ссылка на реестр вызова именно "мой комп."


gdaujk   (2006-12-04 14:52:00) [16]

>>Steep ©   (04.12.06 14:46) [4]

Просто explore открывает неизвестно что :-)

Нашёл вариант:

ShellExecute(Handle, nil, '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', nil,nil,SW_SHOWNORMAL);

Может кто объяснит, как это робит?


zdm   (2006-12-04 14:52:00) [17]


> Steep ©   (04.12.06 14:46) [4]

так он выйдет на путь откуда запущено приложение.
только так могу предложить, откроется мой комп. но установленый на диск с:\
ShellExecute(Self.Handle,'explore','c:\',nil,nil,SW_SHOWNORMAL);


Steep   (2006-12-04 14:46:00) [18]

не помню точно
попробуй
ShellExecute(Self.Handle,' explore',nil,nil,nil,SW_SHOWNORMAL);
или
напиши ShellExecute + f1, там где-то написаны параметры..


gdaujk   (2006-12-04 14:11:00) [19]

>>Anatoly Podgoretsky ©   (04.12.06 12:34) [1]

Вы думаете, что я прямо так и пишу:


begin
 explorer /select, C:\
end;


???

>>zdm

Простите, вы читать умеете? Написано же: "Мой компьютер". При чём тут ваше

ShellExecute(Self.Handle,'open','c:\',nil,nil,SW_SHOWNORMAL);

???

Перефразирую вопрос. Делаю так:

ShellExecute(Self.Handle, nil,'explorer', '/select, C:\',nil,SW_SHOWNORMAL);
(то же, что explorer /select, C:\)

Подозреваю, что есть другой вариант: программа XXX, например, тоже запускает Explorer - "Мой компьютер", только C:\  не выделяется (как это происходит в выше описанном варианте)

PS: Ещё раз повторю: Explorer должен показать не C:\, не "Мои документы", не что быто ни было ещё, а  "МОЙ КОМПЬЮТЕР"...


zdm   (2006-12-04 12:59:00) [20]

uses .... ShellApi ....

ShellExecute(Self.Handle,'open','c:\',nil,nil,SW_SHOWNORMAL);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо