2014-12-15 2 views
2

Есть ли способ открыть для определенной вкладки свойства с использованием свойств ShellExecute Verb?Вкладка специальных свойств с использованием свойств ShellExecute Verb

Есть ли способ сделать это вообще? (Не обязательно должен быть ShellExecute, но не может найти много, что отобразит «окно свойств» файла)

(Воспроизводит поведение правой кнопки мыши по файлу, выбрав свойства и щелкнув вкладку «Сведения»)

+0

возможно дубликат [Как один вызвать диалоговое окно Разрешения для Windows программно?] (HTTP://stackoverflow.com/questions/28035464/how-does-one-invoke-the-windows-permissions-dialog-programmatically) – wOxxOm

ответ

1

Я был в состоянии найти решение. Следующие ответы, написанные в C# были очень полезны:

Вот код:

// initalize COM 
HRESULT coInitRes = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); 

SHELLEXECUTEINFO ShExecInfo = {}; // initialize empty structure 
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST; 
ShExecInfo.lpVerb = "properties"; 
ShExecInfo.lpFile = "C:\\Users"; 
ShExecInfo.lpParameters = "Security"; 
// ShExecInfo.lpParameters = "Tools"; // if you want to open another tab 
ShExecInfo.nShow = SW_SHOW; 
boolean result = ShellExecuteEx(&ShExecInfo); 
if (!result) { 
    int res = GetLastError(); // this retrieves the error code 
    // int res = (int) ShExecInfo.hInstApp; // this retrieves another error code 
          // on success, this value is 32 
} 

// close COM 
if (coInitRes == S_OK || coInitRes == S_FALSE) { // do not call when result is RPC_E_CHANGED_MODE 
    CoUninitialize(); 
} 

Я не уверен, если вы действительно должны позвонить CoInitializeEx и CoUninitialize, но the docs of ShellExecuteEx заявляют, что это хорошая практика.

В этом примере открывается Безопасность вкладка Свойства диалог. Вы можете изменить значение ShExecInfo.lpParameters, чтобы указать другую вкладку, например Tools.

Обратите внимание, что если ваше приложение использует Unicode, вы должны предварять в L на строку, например:

ShExecInfo.lpFile = L"C:\\Users"; 
Смежные вопросы