Диалогов прозорец на свойствата на файла (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 работи (в смисъл, че виси - по добър начин - в паметта), докато този диалогов прозорец не бъде затворен.