void Shortcut_Run(const char* szLink, const char* szWorkdir) { wchar_t wszLink[MAX_PATH] = {}; ::MultiByteToWideChar(CP_ACP, NULL, szLink, int(strlen(szLink)), wszLink, MAX_PATH); IShellLink *pShellLink; HRESULT hRes; ::CoInitialize(NULL); hRes = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(void **)&pShellLink); if(SUCCEEDED(hRes)) { IPersistFile *ppf; hRes = pShellLink->QueryInterface(IID_IPersistFile,(void **)&ppf); if(SUCCEEDED(hRes)) { hRes = ppf->Load(wszLink, TRUE); if(SUCCEEDED(hRes)) { int show = SW_SHOW; char path[MAX_PATH] = {}; char workdir[MAX_PATH] = {}; pShellLink->GetShowCmd(&show); pShellLink->GetPath(path, MAX_PATH, NULL, 0); pShellLink->GetWorkingDirectory(workdir, MAX_PATH); if(path[0] != 0) { ShellExecute(NULL, "open", path, NULL, workdir, show); } } ppf->Release(); } pShellLink->Release(); } ::CoUninitialize(); }
// @pymethod int|PyIShellLink|GetShowCmd|Retrieves the show (SW_) command for a shell link object. PyObject *PyIShellLink::GetShowCmd(PyObject *self, PyObject *args) { IShellLink *pISL = GetI(self); if ( pISL == NULL ) return NULL; HRESULT hr; int iShowCmd; PY_INTERFACE_PRECALL; hr = pISL->GetShowCmd( &iShowCmd ); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return OleSetOleError(hr); return PyInt_FromLong(iShowCmd); }