Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизКак программно открыть "Мой компьютер"? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c