| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1224 人关注过本帖
标题:[求助]在桌面上创建快捷方式出错
只看楼主 加入收藏
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
结帖率:100%
收藏
 问题点数:0 回复次数:1 
[求助]在桌面上创建快捷方式出错
出错的地方已经用红字标出,希望有人给指点一下

/*******说明**********
public成员变量:
CString strname;
CString pathname;
*********************/

void CMy454Dlg::OnOK()
{
    // TODO: Add extra validation here
    
    //CDialog::OnOK();
    if (strname.IsEmpty())
    {
        MessageBox("strname.IsEmpty()");    //用于调试
        return ;
    }
    IShellLink *link;
    IPersistFile *file;
    HRESULT res = ::CoCreateInstance(CLSID_ShellLink, NULL,
        CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&link);
    if (FAILED(res))    //★★-----为什么在这里会失败?
    {
        MessageBox("FAILED(res)1");    //用于调试
        return ;    
    }
    link->SetPath(pathname);
    res = link->QueryInterface(IID_IPersistFile, (void**)&file);
    if (FAILED(res))
    {
        MessageBox("FAILED(res)2");    //用于调试
        return ;
    }
    WORD wsz[MAX_PATH];
    CString linkname;
    LPITEMIDLIST pid;    //定义一个指向文件夹位置的指针变量
    char path[MAX_PATH];    //..保存路径字符数组
    //获得特定文件夹位置的指针,保存于pid
    ::SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pid);
    ::SHGetPathFromIDList(pid, path);    //根据文件夹的位置指针取得文件夹的路径,保存于path
    
    CString name;
    int pos = strname.Find(".");    //获得.在文件名中的位置索引
    name = strname.Left(pos);    //取得.左边的字符串,也就是文件名
    linkname.Format("%s\\%s.lnk", path, name);    //生成在桌面创建文件的全路径
    //查这个函数的用法
    MultiByteToWideChar(CP_ACP, 0, linkname, -1, wsz, MAX_PATH);
    file->Save(wsz, STGM_READWRITE);
    file->Release();
    link->Release();
    ::SHChangeNotify(SHCNE_CREATE|SHCNE_INTERRUPT, SHCNF_FLUSH|SHCNF_PATH, linkname, 0);
    ::SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT, SHCNF_FLUSH|SHCNF_PATH, path, 0);
}

void CMy454Dlg::OnBUTTONbrowse()
{
    // TODO: Add your control notification handler code here
    CFileDialog dlg(FALSE,"可执行文件", "*.EXE", OFN_HIDEREADONLY, "可执行程序|*.exe||", NULL);
    if (dlg.DoModal() == IDOK)
    {
        pathname = dlg.GetPathName();    //取得文件全路径
        strname = dlg.GetFileName();    //取得文件的名字
        SetDlgItemText(IDC_EDIT1, pathname);    //在编辑框中显示所选择程序的全路径
    }
}

[[it] 本帖最后由 随心 于 2008-2-3 13:36 编辑 [/it]]
搜索更多相关主题的帖子: strname void 变量 CString OnOK 
2008-02-03 13:31
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
没有人知道吗?

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-05 14:13
快速回复:[求助]在桌面上创建快捷方式出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042441 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved