Я был в состоянии найти решение. Следующие ответы, написанные в 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";
возможно дубликат [Как один вызвать диалоговое окно Разрешения для Windows программно?] (HTTP://stackoverflow.com/questions/28035464/how-does-one-invoke-the-windows-permissions-dialog-programmatically) – wOxxOm