使用CoCreateInstance()
得到IShellLink,即可设置快捷方式内容了

解决方案 »

  1.   

    创建和读取快捷方式是通过COM,看下面的例子:HRESULT CreateLink(HWND hwnd) 
    {
    HRESULT r = CoInitialize(NULL);
    IShellLink* psl; 
    IPersistFile* ppf; 
    r = CoCreateInstance(CLSID_ShellLink, NULL, 
            CLSCTX_INPROC_SERVER, IID_IShellLinkA,(LPVOID *) &psl); 

    // read short cut r = psl->QueryInterface(IID_IPersistFile,(void **)  &ppf); 
    if (SUCCEEDED(r)) { 
                WORD wsz[MAX_PATH];              // Ensure that the string is ANSI. 
                MultiByteToWideChar(CP_ACP, 0, "C:\\WINDOWS\\Desktop\\s.lnk", -1, 
                    wsz, MAX_PATH);  
                // Save the link by calling IPersistFile::Save. 
                r = ppf->Load (wsz,STGM_READWRITE);

    char szFile[255];
    WIN32_FIND_DATA fd;
         psl->GetPath(szFile,255,&fd,SLGP_UNCPRIORITY); 
    psl->GetArguments(szFile,255);
    ppf->Release();         
    }

    /*create shortcut
    psl->SetPath("c:\\windows\\notepad.exe"); 
        psl->SetDescription("snotepad");  
    psl->SetWorkingDirectory("c:\\windows");
    WORD key;
    key = (HOTKEYF_CONTROL << 8) | (HOTKEYF_ALT << 8) | 0x42;
    psl->SetHotkey(key);
           // Query IShellLink for the IPersistFile interface for saving the 
           // shortcut in persistent storage. 
            r = psl->QueryInterface(IID_IPersistFile,(void **)  &ppf); 
    if (SUCCEEDED(r)) { 
                WORD wsz[MAX_PATH];              // Ensure that the string is ANSI. 
                MultiByteToWideChar(CP_ACP, 0, "C:\\WINDOWS\\Desktop\\s.lnk", -1, 
                    wsz, MAX_PATH);  
                // Save the link by calling IPersistFile::Save. 
                r = ppf->Save(wsz, TRUE); 
                ppf->Release();         } 
            psl->Release(); return r; */
    CoUninitialize();
    return r;