Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
2-1165230352
IGo
2006-12-04 14:05
2006.12.24
Не отображается Label, пока не загрузится OLE объект


1-1162970612
Димыч
2006-11-08 10:23
2006.12.24
Resize формы (BorderStyle = bsNone)


15-1164909916
Leonid Troyanovsky
2006-11-30 21:05
2006.12.24
Шеклтон (Shackleton) Эрнест Генри


15-1165203395
Slider007
2006-12-04 06:36
2006.12.24
С днем рождения ! 3 декабря


3-1160636165
Alvin
2006-10-12 10:56
2006.12.24
Изменения данных в БД на SQL Server





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский