VC小技巧(8)-----创建桌面图标

本文介绍了一种使用C++和注册表操作来创建桌面快捷方式的方法,包括设置GUID、图标路径、命令及更新桌面等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <atlbase.h>

    m_szGUID ="{9F0DBE59-C479-49c5-951B-2545242FBDF6}"; //设置GUID
    m_szCmd = "cmd /K dir c://"; //设置命令
    m_szIconPath = "F://res//MFC.ico"; //图标文件
    m_szDName = "我的图标"; //设置显示的名称

//提供两个按钮响应函数模拟创建过程
void CDesktop_scDlg::OnCreate()
{
    UpdateData(TRUE);
    //
    char szTemp[256];

    CRegKey m_kdsktp;
    //创建GUID入口
    sprintf(szTemp,"CLSID//%s",m_szGUID);
    m_kdsktp.Create(HKEY_CLASSES_ROOT,szTemp);
    m_kdsktp.SetValue(m_szDName);
    m_kdsktp.Close();

    //设置图标
    sprintf(szTemp,"CLSID//%s//DefaultIcon",m_szGUID);
    m_kdsktp.Create(HKEY_CLASSES_ROOT,szTemp);
    m_kdsktp.SetValue(m_szIconPath);
    m_kdsktp.Close();

    //设置双击图标时的打开命令
    sprintf(szTemp,"CLSID//%s//Shell//Open//Command",m_szGUID);
    m_kdsktp.Create(HKEY_CLASSES_ROOT,szTemp );
    m_kdsktp.SetValue(m_szCmd);
    m_kdsktp.Close();

    //设置菜单属性
    sprintf(szTemp,"CLSID//%s//ShellFolder",m_szGUID);
    BYTE bValue[4];
    m_kdsktp.Create(HKEY_CLASSES_ROOT,szTemp);
    bValue[0]=0x0; //"00.00.00.00"
    bValue[1]=0x0;
    bValue[2]=0x0;
    bValue[3]=0x0;
    RegSetValueEx(m_kdsktp.m_hKey,"Attributes",0,REG_BINARY,bValue,4);
    m_kdsktp.Close();

    //在桌面放置图标
    sprintf(szTemp,"SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Desktop//NameSpace//%s",m_szGUID);
    m_kdsktp.Create(HKEY_LOCAL_MACHINE,szTemp);
    m_kdsktp.SetValue(m_szDName);
    m_kdsktp.Close();

    //通知桌面更新
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,0, 0);
}

void CDesktop_scDlg::OnDel()
{
    UpdateData(TRUE);
    //
    char szTemp[256];

    CRegKey m_kdsktp;
    //删除GUID入口
    sprintf(szTemp,"CLSID");
    m_kdsktp.Open(HKEY_CLASSES_ROOT,szTemp);
    m_kdsktp.DeleteSubKey(m_szGUID);
    m_kdsktp.Close();

    //删除桌面图标
    sprintf(szTemp,"SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Desktop//NameSpace");
    m_kdsktp.Open(HKEY_LOCAL_MACHINE,szTemp);
    m_kdsktp.DeleteSubKey(m_szGUID);
    m_kdsktp.Close();

    //通知桌面更新
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,0, 0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值