[求助]在桌面上创建快捷方式出错
出错的地方已经用红字标出,希望有人给指点一下/*******说明**********
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]]