Диалогов прозорец на свойствата на файла (ShellExecuteEx)
Написах елементарна програма за показване на диалоговия прозорец за свойствата на файла, предаден в командния ред:
програма showprop;
вар
ShellExecuteInfo: TShellExecuteInfo;
започнете
ако ParamCount <> 1 тогава
WriteLn ("Очаква се един и единствен параметър.")
друго
започнете
FillChar (ShellExecuteInfo, SizeOf (ShellExecuteInfo), 0);
ShellExecuteInfo.cbSize: = SizeOf (ShellExecuteInfo);
ShellExecuteInfo.lpFile: = PChar (ParamStr (1));
ShellExecuteInfo.lpVerb: = "свойства";
ShellExecuteInfo.fMask: = SEE_MASK_INVOKEIDLIST;
ShellExecuteEx (@ShellExecuteInfo);
край;
край.
При стартиране обаче:
showprop.exe c: \ autoexec.bat
резултатите от програмата (диалогов прозорец на свойствата на файла autoexec.bat) не се наблюдават.
След малко добавяне, а именно вмъкване на повикване MessageBox веднага след ShellExecuteEx (@ShellExecuteInfo):
програма showprop;
използва
ShellApi, Windows;
вар
ShellExecuteInfo: TShellExecuteInfo;
започнете
ако ParamCount <> 1 тогава
WriteLn ("Очаква се един и единствен параметър.")
друго
започнете
FillChar (ShellExecuteInfo, SizeOf (ShellExecuteInfo), 0);
ShellExecuteInfo.cbSize: = SizeOf (ShellExecuteInfo);
ShellExecuteInfo.lpFile: = PChar (ParamStr (1));
ShellExecuteInfo.lpVerb: = "свойства";
ShellExecuteInfo.fMask: = SEE_MASK_INVOKEIDLIST;
ShellExecuteEx (@ShellExecuteInfo);
MessageBox (0, "qwerty", "qwerty", MB_OK);
край;
край.
се появява прозорецът с желаните свойства на файла и известно време след (!) MessageBox "a. И след като щракнете върху OK MessageBox" и прозорецът със свойства изчезва.
Какво и как да направя, за да покажа прозореца на свойствата на файла (и само той) и за да не изчезне спонтанно, а само когато сам го затворя?
използва
Windows, Съобщения, SysUtils, Варианти, Класове, Графика, Контроли, Форми,
Диалози, StdCtrls;
конст
SHOP_PRINTERNAME = 1;
SHOP_FILEPATH = 2;
SHOP_VOLUMEGUID = 4;
Тип
TForm1 = клас (TForm)
Бутон1: TButton;
Edit1: TEdit;
процедура Button1Click (Изпращач: TObject);
процедура FormCreate (Изпращач: TObject);
частни
< Private declarations >
публично
< Public declarations >
край;
вар
Form1: TForm1;
функция SHObjectProperties (hOwnerWnd: HWND; dwType: DWORD;
szObject, szPage: PWideChar): LongBool; stdcall;
функция SHObjectProperties (hOwnerWnd: HWND; dwType: DWORD;
szObject, szPage: PWideChar): LongBool;
външно име "shell32.dll" "SHObjectProperties";
процедура TForm1.Button1Click (Изпращач: TObject);
вар
S: WideString;
започнете
S: = Edit1.Text;
ако не SHObjectProperties (Application.Handle, SHOP_FILEPATH, PWideChar (S), nil) тогава
ShowMessage ("съжалявам.");
край;
процедура TForm1.FormCreate (Изпращач: TObject);
започнете
Edit1.Text: = ParamStr (0);
край;
Както се казва, "всичко е наред, отиваме на дъното, другарю капитане!":)
Точно това искате да остане диалоговият прозорец за свойства на файла, докато не го затворите лично.
Между другото, за SHObjectProperties. Това е някаква странна функция, като цяло. Първоначално той беше напълно недокументиран, като се започне с 5-та версия на shell32.dll, той е документиран, но не се извиква по име, а само по реда 178. Като цяло, опцията:
програма showprop;
функция SHObjectProperties (hWnd: LongWord; dwType: LongWord; szObject: Pointer;
szPage: Показалец): LongBool; външен индекс "shell32.dll" 178;
конст
SHOP_FILEPATH = 2;
започнете
ако ParamCount <> 1 тогава
WriteLn („Очаква се един и единствен параметър.“)
друго
SHObjectProperties (0, SHOP_FILEPATH, PChar (ParamStr (1)), нула);
< // тот же результат, что и строчкой выше.
SHObjectProperties (Windows.FindWindow ("Progman", "Program Manager"),
SHOP_FILEPATH, PChar (ParamStr (1)), нула);
>
край.
показва диалогов прозорец със свойства на някакъв непознат за мен обем на твърдия диск (със заглавие "Properties: Volume без етикет", неизвестна файлова система и с нулев капацитет). Самият процес showprop.exe работи (в смисъл, че виси - по добър начин - в паметта), докато този диалогов прозорец не бъде затворен.