簡體   English   中英

具有“屬性”動詞的ShellExecute(Ex)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM