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

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

Свойства файла [D7, WinXP]


Страницы:   1 2

Cj ©   (2007-03-08 05:04:00) 

Напомните пожалуйста, какие параметры надо давать EXPLORER-у для вывода свойств файла\папки. Заранее спасибо.


Rouse_   (2007-03-16 10:02:00) [1]

Ну я код то приведенный begin_end -ом использовал, где lpFile :)


GrayFace   (2007-03-15 18:29:00) [2]

Rouse_ ©   (09.03.07 13:53) [7]
lpExecInfo.lpDirectory := 'c:\';

begin...end ©   (13.03.07 9:51) [18]
sei.lpFile := 'c:\';


Rouse_   (2007-03-13 10:36:00) [3]

Странно, ну ладно... будем считать что у меня что-то с виндой...


begin...end   (2007-03-13 09:51:00) [4]

> Rouse_ ©   (13.03.07 09:19) [17]

> Я на диск С:\ пробую.

И я. Код такой:

uses ShellAPI;

var
 sei: TShellExecuteInfo;
begin
 FillChar(sei, SizeOf(sei), 0);
 sei.cbSize := SizeOf(sei);
 sei.lpFile := 'c:\';
 sei.lpVerb := 'properties';
 sei.fMask := SEE_MASK_INVOKEIDLIST;
 ShellExecuteEx(@sei);
end.


> Правда у меня голый SE т.е. ни обновления браузера ни даже
> офиса не нем нет

У меня тоже. Версия Windows 98 4.10.2222.


Rouse_   (2007-03-13 09:19:00) [5]


> begin...end ©   (12.03.07 20:15) [14]
> У меня -- работает. Именно на Win98 SE.


Ты на файл вызываешь диалог или на что? Я на диск С:\ пробую. На SE четко не работает. Правда у меня голый SE т.е. ни обновления браузера ни даже офиса не нем нет :)


DVM   (2007-03-12 23:40:00) [6]

function ShowFilePropertiesDialog(const Handle: HWND; const FileName: string): boolean;
const
 cProperties = 'properties';
var
 Info: TShellExecuteInfo;
begin
 FillChar(Info, SizeOf(Info), #0);
 with Info do
 begin
   cbSize := SizeOf(Info);
   lpFile := PChar(FileName);
   nShow := SW_SHOW;
   fMask := SEE_MASK_INVOKEIDLIST;
   Wnd := Handle;
   lpVerb := cProperties;
 end;
 Result := ShellExecuteEx(@Info);
end;


Eraser   (2007-03-12 22:28:00) [7]

вполне может быть дело именно в SE. там довольно много отличий, по сравнению с без_SE.


begin...end   (2007-03-12 20:15:00) [8]

> Rouse_ ©   (12.03.07 13:01) [13]

У меня -- работает. Именно на Win98 SE.


Rouse_   (2007-03-12 13:01:00) [9]


> Ты будешь смеяться, но код [6] на Windows 98 SE прекрасно
> работает.

Ты будешь смеятся, но не работает и причины ошибки я тебе уже привел.


begin...end   (2007-03-11 22:30:00) [10]

> Rouse_ ©   (11.03.07 16:36) [9]
> Я тоже сильно извиняюсь, но nShow тут вообще ни при чем

Ты будешь смеяться, но код [6] на Windows 98 SE прекрасно работает. А код [7] -- нет. "Найдите 10 отличий" (с)


Rouse_   (2007-03-11 17:25:00) [11]


> Как я понял, IShellFolder и т.п. - это OLE, который MULTITHREADED
> не поддерживает.

Почему не поддерживает?


> // Получаем указатель на папку "Мой компьютер"
> Зачем "Мой компьютер", а не Desktop?

Потомучто десктопы у разных систем расположенны в разных местах :) Были кике-то там глюки, уже не упомню все...


> Desktop.BindToObject(PathPIDL,  nil,  IID_IShellFolder,
> Pointer(ShellFolder))
> Зачем Pointer()?

Потому что функция хочет четвертым параметром указатель :)
Что и указано явно.


> А первый код такой ошибки не выдаст :)
> А если добавить OleCheck(Context.InvokeCommand(AInvokeCommand))?

Да хоть обдобавляйся :)


GrayFace   (2007-03-11 16:56:00) [12]

По [1] есть вопросы:

Rouse_ ©   (09.03.07 12:49) [1]
CoInit := CoInitializeEx(nil, COINIT_MULTITHREADED);

Как я понял, IShellFolder и т.п. - это OLE, который MULTITHREADED не поддерживает.

Rouse_ ©   (09.03.07 12:49) [1]
// Получаем указатель на папку "Мой компьютер"

Зачем "Мой компьютер", а не Desktop?

Rouse_ ©   (09.03.07 12:49) [1]
Desktop.BindToObject(PathPIDL,  nil,  IID_IShellFolder, Pointer(ShellFolder))

Зачем Pointer()?

Rouse_ ©   (11.03.07 16:36) [9]
А первый код такой ошибки не выдаст :)

А если добавить OleCheck(Context.InvokeCommand(AInvokeCommand))?


Rouse_   (2007-03-11 16:36:00) [13]


> begin...end ©   (09.03.07 14:08) [8]
> > Rouse_ ©   (09.03.07 13:53) [7]
>
> Я сильно извиняюсь, но в коде по ссылке в [6] поле nShow
> не инициализируется.

Я тоже сильно извиняюсь, но nShow тут вообще ни при чем :)
Ошибка абсолютно логичная и все нормально разжовано в MSDN :)
Дело в том что ShellExecuteEx на старых системах берет вербы из реестра и соответственно выполнение данного кода на отсутствующий верб 'properties' для диска С:\ выдаст абсолютно нормальную ошибку о отсутствии ассоциаций.
А первый код такой ошибки не выдаст :)


begin...end   (2007-03-09 14:08:00) [14]

> Rouse_ ©   (09.03.07 13:53) [7]

Я сильно извиняюсь, но в коде по ссылке в [6] поле nShow не инициализируется.


Rouse_   (2007-03-09 13:53:00) [15]

Ясно :)
Но ты знаешь - на Windows 98 SE данный код выдает ошибку :)

var
 lpExecInfo: TShellExecuteInfo;
begin
 ZeroMemory(@lpExecInfo, SizeOf(TShellExecuteInfo));
 lpExecInfo.cbSize := SizeOf(TShellExecuteInfo);
 lpExecInfo.lpVerb := 'properties';
 lpExecInfo.lpDirectory := 'c:\';
 lpExecInfo.fMask := SEE_MASK_INVOKEIDLIST;
 lpExecInfo.nShow := SW_NORMAL;
 if not ShellExecuteEx(@lpExecInfo) then
   RaiseLastOSError;


begin...end   (2007-03-09 13:48:00) [16]

> Rouse_ ©   (09.03.07 13:41) [5]

http://groups.google.com/group/borland.public.delphi.winapi/browse_thread/thread/91038348e189930e


Rouse_   (2007-03-09 13:41:00) [17]


> Ещё можно ShellExecuteEx использовать.

А это как? через lpExecInfo.lpVerb := 'properties'; у меня не захотело показываться :)


begin...end   (2007-03-09 13:33:00) [18]

> Rouse_ ©   (09.03.07 13:29) [3]

У автора -- XP.
Ещё можно ShellExecuteEx использовать. Правда, там ограничение с Windows 3.11 :)


Rouse_   (2007-03-09 13:29:00) [19]

Там ограничение с Windows 2000 :)


begin...end   (2007-03-09 13:26:00) [20]

А SHObjectProperties вызвать -- оно не проще будет?


Страницы:   1 2

Наверх

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