Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Как программно открыть "Мой компьютер"?   Найти похожие ветки 

 
gdaujk ©   (2006-12-04 12:09) [0]

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

explorer /select, C:\

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


 
Anatoly Podgoretsky ©   (2006-12-04 12:34) [1]

> gdaujk  (04.12.2006 12:09:00)  [0]

Есть и это ShellExecute


 
zdm ©   (2006-12-04 12:59) [2]

uses .... ShellApi ....

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


 
gdaujk ©   (2006-12-04 14:11) [3]

>>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:\, не "Мои документы", не что быто ни было ещё, а  "МОЙ КОМПЬЮТЕР"...


 
Steep ©   (2006-12-04 14:46) [4]

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


 
zdm ©   (2006-12-04 14:52) [5]


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

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


 
gdaujk ©   (2006-12-04 14:52) [6]

>>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:54) [7]


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

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


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

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

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


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


 
gdaujk ©   (2006-12-04 14:57) [9]


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


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


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

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

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

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


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

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


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

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


 
umbra ©   (2006-12-04 15:09) [13]


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

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


 
gdaujk ©   (2006-12-04 15:10) [14]


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


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


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


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

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


 
Leonid Troyanovsky ©   (2006-12-04 15:18) [16]


> 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.


 
gdaujk ©   (2006-12-04 15:34) [17]


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


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


 
Leonid Troyanovsky ©   (2006-12-04 15:53) [18]


> 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 16:00) [19]


> 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 16:08) [20]


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


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

--
Regards, LVT.


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
6-1154406596
Тореро
2006-08-01 08:29
2006.12.24
Калькуляция TCP-чексуммы


2-1165468650
Antello
2006-12-07 08:17
2006.12.24
событие On Select компоненты TComboBox


15-1164895933
salexn
2006-11-30 17:12
2006.12.24
Native Компоненты для работы с XML


6-1154777105
Screamer
2006-08-05 15:25
2006.12.24
Получение данных передающихся на модем


2-1165389595
PaDi6@h
2006-12-06 10:19
2006.12.24
подключение к DB SQL Server