Я хочу показать диалог свойств файла Windows для файла с моего кода на С++ (в Windows 7, используя VS 2012). Я нашел следующий код в этом ответе (который также содержит полный MCVE). Я также попробовал сначала называть CoInitializeEx()
, как указано в документации ShellExecuteEx()
:
// Whether I initialize COM or not doesn't seem to make a difference.
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof info;
info.lpFile = L"D:\\Test.txt";
info.nShow = SW_SHOW;
info.fMask = SEE_MASK_INVOKEIDLIST;
info.lpVerb = L"properties";
ShellExecuteEx(&info);
Этот код работает, т.е. отображается диалоговое окно свойств и ShellExecuteEx()
возвращает TRUE
. Однако на вкладке "Сведения" свойство размера неверно и отсутствуют свойства даты:
Остальные свойства на вкладке "Сведения" (например, атрибуты файла) верны. Как ни странно, свойства размера и даты отображаются правильно на вкладке "Общие" (вкладка слева).
Если я открою окно свойств через проводник Windows (файл → щелкните правой кнопкой мыши → Свойства), то все свойства на вкладке "Сведения" отображаются правильно:
Я попробовал это с несколькими файлами и типами файлов (например, txt, rtf, pdf) на разных дисках и на трех разных компьютерах (1x немецкий 64-разрядный Windows 7, 1x английский 64-разрядный Windows 7, 1x английский 32-разрядный Windows 7). Я всегда получаю тот же результат, даже если я запускаю свою программу как администратор. В (64-разрядная) Windows 8.1 код работает для меня.
Моя первоначальная программа, в которой я обнаружил проблему, - это приложение MFC, но я вижу ту же проблему, если я помещаю вышеуказанный код в консольное приложение.
Что мне нужно сделать, чтобы показать правильные значения на вкладке "Сведения" в Windows 7? Возможно ли это?