关于微软Office快捷方式的问题。。。在线等。

RomanticProgrammer 2004-01-04 10:17:29
同过CFileDialog的GetPathName可以得到用户选择的快捷方式所指向的文件,但唯一不行的是Office自己在桌面创建的快捷方式。
如果用户在CFileDialog中选择了Office自己创建的快捷方式,比如word的快捷方式,CFileDailog::GetPathName返回的是一个XXX/{XXXXX-XXXXX-XXXXX-XXXX}/wordicon.exe。而这个程序只保存word的图标,并不是word,很奇怪,不知道大家有没有研究过这个问题。而且单击鼠标右键查看快捷方式的属性,明显看到office的快捷方式的属性和一般程序的快捷方式的属性有很到的不同,比如一般程序的快捷方式中“目标”里面就是程序的全路径,而office自己创建的快捷方式的“目标”就是“microsoft office word”等。。。。

怎样通过CFileDialog得到office的快捷方式所指向的office程序呢??
...全文
453 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazygod 2004-01-06
  • 打赏
  • 举报
回复
Gz
Ah 2004-01-06
  • 打赏
  • 举报
回复
关注
Leemaasn 2004-01-06
  • 打赏
  • 举报
回复
没用过,没接触过,友情Up。。。


^@^
ross33123 2004-01-06
  • 打赏
  • 举报
回复
研究了大半天

有了一点眉目

但不是很肯定

以后再说
nonocast 2004-01-06
  • 打赏
  • 举报
回复
GZ
RomanticProgrammer 2004-01-06
  • 打赏
  • 举报
回复
up
Goodxstudio 2004-01-06
  • 打赏
  • 举报
回复
mark
constantine 2004-01-06
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
//
// 你说的是不是用这一种方法建立的快捷方式。??????
// 但愿对你有所帮助。
//
//---------------------------------------------------------------------------
// 先创建一个GUID(可以使用VS6的guidgen.exe实用工具
static const char *guid_string = "{35D77946-4BA8-4e7d-9E98-0271E0A328B7}";
static const char *shortcut_name = "程序名" ;
static const char *DesktopNamespaceKey =
"SOFTWARE\\Microsoft\\Windows\\"
"CurrentVersion\\Explorer\\Desktop\\NameSpace";

// 在桌面创建类似于IE的快捷方式
bool CreateShortCutLikeIE(void)
{
bool boolCreateSucessed = true;
AnsiString GuidKey;
GuidKey.sprintf("CLSID\\%s",guid_string);
AnsiString DefaultIconKey = GuidKey + "\\DefaultIcon";
AnsiString ShellCommandKey = GuidKey + "\\Shell\\Open\\Command";
AnsiString PropertiesMenuKey = GuidKey + "\\Shell\\属性(&R)\\Command";
AnsiString AttributeKey = GuidKey + "\\ShellFolder";

TRegistry *Reg = new TRegistry;
try
{
Reg->RootKey = HKEY_CLASSES_ROOT;
// 快捷方式的名称
if(!Reg->OpenKey(GuidKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
Reg->WriteString("",shortcut_name);
Reg->CloseKey();
// 快捷方式的图标
if(!Reg->OpenKey(DefaultIconKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
AnsiString IconFile = Application->ExeName;// + ",0";
Reg->WriteString("",IconFile);
Reg->CloseKey();
// 快捷方式的目标
if(!Reg->OpenKey(ShellCommandKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
Reg->WriteString("",Application->ExeName);
Reg->CloseKey();
// 属性菜单
AnsiString PropMenu = "rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0";
if(!Reg->OpenKey(PropertiesMenuKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
Reg->WriteString("",PropMenu);
Reg->CloseKey();
// 删除属性菜单的缺省菜单项
if(!Reg->OpenKey(AttributeKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
int i = 0;
Reg->WriteBinaryData("Attributes",(void *)(&i),4);
Reg->CloseKey();

// 添加一个引用
// HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\Namespace
// 这样它将只显示在桌面上
Reg->RootKey = HKEY_LOCAL_MACHINE;
AnsiString NameKey = DesktopNamespaceKey;
NameKey = NameKey + "\\" + guid_string;
if(!Reg->OpenKey(NameKey,true))
{
boolCreateSucessed = false; // 失败
return false;
}
Reg->WriteString("",shortcut_name);
Reg->CloseKey();

// 通知Shell,显示这个快捷方式
//SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT, 0, 0);
}__finally
{
delete Reg;
}
if(boolCreateSucessed)
{
Application->MessageBoxA("快捷方式创建成功!","完成",MB_OK|MB_ICONINFORMATION);
}else
{
Application->MessageBoxA("快捷方式创建失败!","错误",MB_OK|MB_ICONERROR);
}
return boolCreateSucessed;
}
//---------------------------------------------------------------------------
// 删除在桌面类似于IE的快捷方式
void DeleteShortCutLikeIE(void)
{
AnsiString GuidKey;
GuidKey.sprintf("CLSID\\%s",guid_string);

TRegistry *Reg = new TRegistry;
try
{
Reg->RootKey = HKEY_CLASSES_ROOT;
Reg->DeleteKey(GuidKey);
// 删除引用
// HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\Namespace
AnsiString NameKey = DesktopNamespaceKey;
NameKey = NameKey + "\\" + guid_string;
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->DeleteKey(NameKey);
// 同时Shell,注册表已经改变了
// SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT, 0, 0);

Application->MessageBoxA("快捷方式已经被删除!","完成",MB_OK|MB_ICONINFORMATION);
}__finally
{
delete Reg;
}
}
RomanticProgrammer 2004-01-06
  • 打赏
  • 举报
回复
up
小笨象 2004-01-05
  • 打赏
  • 举报
回复
只能说:微软变太!
RomanticProgrammer 2004-01-04
  • 打赏
  • 举报
回复
怎么,没有人研究过这个问题吗?
RomanticProgrammer 2004-01-04
  • 打赏
  • 举报
回复
up
zhaolaoxin 2004-01-04
  • 打赏
  • 举报
回复
gz
RomanticProgrammer 2004-01-04
  • 打赏
  • 举报
回复
靠,没人知道?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧