我已閱讀this並瞭解lpClass可用於解決「錯誤的文件擴展問題」。但是,當我閱讀以下代碼行時,我無法弄清楚在打開可執行文件時使用的lpClass。使用ShellExecuteEx打開一個可執行文件,同時指定一個lpClass?
//code excerpt from foo.exe
SHELLEXECUTEINFO info;
ZeroMemory(&info, sizeof(SHELLEXECUTEINFO));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.nShow = SW_NORMAL;
info.lpVerb = L"open";
info.lpClass = L"ProgId Of foo.exe"; //what is this used for???
info.fMask = SEE_MASK_FLAG_LOG_USAGE | SEE_MASK_CLASSNAME;
info.lpFile = L"bar.exe";
info.lpParameters = lpszParam;
ShellExecuteEx(&info);
沒有lpClass被指定,如果lpVerb是「開放」和lpFile是一個exe,運行代碼只是執行EXE。但是如果在這種情況下指定lpClass呢?
ProgId不用於文件關聯。 Foo.exe註冊爲具有該ProgId的COM服務器,progid用於調用bar.exe作爲SHELLEXECUTEINFO中的lpClass成員...並且我對COM沒有經驗,對不起,我無法解釋ProgId與調用者** foo.exe **相關。 – kennyzx
@kennyzx,這不是'ShellExecuteEx'的用途。你想'CLSIDFromProgID'和'CoCreateInstance'。如果註冊正確,COM系統將負責啓動「bar.exe」。 – Ben