![](/img/trans.png)
[英]ShellExecute: Verb "runas" does not work for batch files with spaces in path
[英]ShellExecute(Ex) with 'properties' verb
我正在嘗試編寫一個程序,從命令行打開文件的屬性。 我讀到可以通過使用ShellExecute和ShellExecuteEx函數中的“ properties”動詞來做到這一點。
因此,我在Windows 10的Visual Studio中編寫了這樣的C ++程序。該程序是:
#include <windows.h>
#include <iostream>
void ShowFileProperties(char *);
int main(int argc, char **argv)
{
if (argc >= 2)
{
std::cout << argv[1] << std::endl;
ShowFileProperties(argv[1]);
}
std::cout << GetLastError();
return 0;
}
void ShowFileProperties(char *szPathName)
{
HRESULT result = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO Sei;
ZeroMemory(&Sei,sizeof(SHELLEXECUTEINFO));
Sei.cbSize = sizeof(SHELLEXECUTEINFO);
Sei.lpFile = szPathName;
Sei.nShow = SW_SHOW;
Sei.fMask = SEE_MASK_INVOKEIDLIST;
Sei.lpVerb = "properties";
ShellExecuteEx(&Sei);
if (result == S_OK || result == S_FALSE)
CoUninitialize();
}
如果我使用有效的文件名(例如。或可執行文件本身的名稱)從命令行運行該程序,則其輸出的只是文件名和零(沒有錯誤),但文件的屬性不打開。
現在,我看到其他人有這個問題,即“ properties”動詞不執行任何操作,或者他們收到一個消息框,指出文件類型沒有用於該操作的關聯程序,但是我沒有能夠找到解決辦法。
這里有人可以幫助我嗎?
提前致謝。
在您的SHELLEXECUTEINFO中傳遞SEE_MASK_NOASYNC(0x00000100)標志,以告訴ShellExecuteEx您正在調用它而沒有消息循環,並且直到完成后才返回。
請參閱MSDN上的SHELLEXECUTEINFO文檔中的備注 。
既不需要也不建議使用Sleep()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.