首页
社区
课程
招聘
[求助]关于用IShellLink创建快捷方式,path指定为URL的疑问
发表于: 2010-1-24 22:29 8370

[求助]关于用IShellLink创建快捷方式,path指定为URL的疑问

2010-1-24 22:29
8370
用IShellLink接口的SetPath设置对象的路径时,如果指定参数为url(比如http://www.baidu.com)时,右键查看文件属性发现为只读,灰色不能更改,而且利用IShellLink接口的GetPath也无法获取先前通过SetPath设置的路径(http://www.baidu.com),请问一下如何可以获取这个路径?

下面是代码:
::CoInitialize(NULL);
CComPtr <IShellLink> spShellLink;
HRESULT hr=spShellLink.CoCreateInstance(CLSID_ShellLink);
CComPtr <IPersistFile> spPersistFile;

TCHAR FileName[MAX_PATH+1] = L"http://www.baidu.com";

hr=spShellLink->SetPath(FileName);
hr=spShellLink->SetDescription(L"test");
hr=spShellLink->QueryInterface(IID_IPersistFile, (void **)&spPersistFile);
//取得桌面的全路径
LPITEMIDLIST pidl;
hr = SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl);
TCHAR szPath[MAX_PATH];
SHGetPathFromIDList(pidl, szPath);
//创建快捷方式
CComBSTR strLinkFilePath(szPath);
strLinkFilePath.Append(L"\\测试.lnk");
hr=spPersistFile->Save(strLinkFilePath, TRUE);
spPersistFile.Release();
spShellLink.Release();
::CoUninitialize();

另外用GetArguments获取出来的信息中首字符为0后续为ttp://www.baidu.com,也就是说少了个h

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
2
结帖,搞定了
2010-1-25 20:18
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么搞定的?很想知道~~~
2010-12-28 19:15
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4
我贴一个吧:

#include <Windows.h>
#include <objbase.h>
#include <stdio.h>
#include <shobjidl.h>
#include <guiddef.h>
#include <shlguid.h>

BOOL GetExePathFromLnk(LPCSTR lpLnkPath,LPSTR buf,int nSize)
{
        if (FAILED(CoInitialize(NULL)))
        {
                return FALSE;
        }
        BOOL bret=FALSE;
        WCHAR wsz[256] = {0};
        IShellLink *ps1;
        HRESULT           hres;
        WIN32_FIND_DATA   fd;
        if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink,NULL,
                CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&ps1)))
        {
                IPersistFile *ppf;
                //ps1->SetPath(strPathObj);
                if(SUCCEEDED(ps1->QueryInterface(IID_IPersistFile,(LPVOID *)&ppf)))
                {
                        MultiByteToWideChar(CP_ACP,0,lpLnkPath,-1,wsz,MAX_PATH);

                        hres =  ppf->Load(wsz,STGM_READ);
                        if(SUCCEEDED(hres))   
                                hres = ps1->GetPath(buf,nSize,&fd,0);   
                        ppf->Release();
                }
                ppf->Release();   
        }
        CoUninitialize();
        return bret;
}
int main()
{
        char lpExePath[256] = {0};
        GetExePathFromLnk("F:\\Windows Server 2003 Checked x86 Build Environment.lnk",lpExePath,sizeof(lpExePath));
        printf("ExePath:%s\r\n",lpExePath);
        return TRUE;
}
2010-12-29 01:33
0
游客
登录 | 注册 方可回帖
返回
//