创建程序菜单和快捷方式的代码

原创 2007年10月08日 20:14:00
// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include 
<malloc.h>
#include 
<memory.h>
#include 
<tchar.h>


#include 
<atlbase.h>
#include 
<shlobj.h>

#ifndef LIB_H
#define LIB_H

bool CreateProgramGroup(const char * szGroupName);
bool CreateLink(const char * szLinkName, const char * szProgPath,
                
bool bDesktop, const char * szGroupName /* = 0 */);
#endif

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance

bool CreateProgramGroup(const char * szGroupName)
{
    
static HKEY hkey;
    
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER,
        
"Software/MicroSoft/Windows/CurrentVersion/Explorer/Shell Folders",
        
0, KEY_READ | KEY_WRITE, &hkey))
    
{
        
return false;
    }

    
    
char szRootDir[MAX_PATH];
    DWORD dwSize 
= MAX_PATH;
    DWORD dwType 
= REG_SZ;
    
if(ERROR_SUCCESS != RegQueryValueEx(hkey, "Programs", NULL, &dwType, (PBYTE)&szRootDir, &dwSize))
    
{
        RegCloseKey(hkey);
        
return false;
    }

    RegCloseKey(hkey);
    
    
char szFullDir[MAX_PATH];
    sprintf(szFullDir, 
"%s/%s", szRootDir, szGroupName);
    CreateDirectory(szFullDir, NULL);
    
return true;
}




bool CreateLink(const char * szLinkName, const char * szProgPath,
                
bool bDesktop, const char * szGroupName /* = 0 */)
{
    CComPtr
<IShellLink> spIShellLink;
    HRESULT hr 
= ::CoCreateInstance(CLSID_ShellLink, NULL, 1,
        IID_IShellLink, (LPVOID 
*)&spIShellLink);  
    
if(FAILED(hr))
    
{
        
return false;
    }

    
    spIShellLink
->SetPath(szProgPath);
    spIShellLink
->SetShowCmd(SW_SHOWNORMAL);
    
    
//获取程序所在目录,设置为工作目录
    char * szSep = strrchr(szProgPath, '/');
    
if(!szSep)
        
return false;
    
    
//获取程序目录
    char szProgFolder[MAX_PATH];
    memset(szProgFolder, 
0, MAX_PATH);
    strncpy(szProgFolder, szProgPath, szSep 
- szProgPath + 1);
    spIShellLink
->SetWorkingDirectory(szProgFolder);
    
    CComPtr
<IPersistFile> spIPersistFile;
    hr 
= spIShellLink->QueryInterface(IID_IPersistFile, (void **)&spIPersistFile);
    
if(FAILED(hr))
    
{
        
return false;
    }

    
    HKEY hkey;
    
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER,
        
"Software/MicroSoft/Windows/CurrentVersion/Explorer/Shell Folders"
        
0, KEY_READ | KEY_WRITE, &hkey))
    
{
        
return false;
    }

    
    
char szRootDir[MAX_PATH];
    DWORD dwSize 
= MAX_PATH;
    DWORD dwType 
= REG_SZ;
    
if(ERROR_SUCCESS != RegQueryValueEx(hkey,  bDesktop ? "Desktop" : "Programs", NULL, &dwType, (PBYTE)&szRootDir, &dwSize))
    
{
        RegCloseKey(hkey);
        
return false;
    }

    RegCloseKey(hkey);
    
    
char szFullDir[MAX_PATH];
    
if(szGroupName)
        sprintf(szFullDir, 
"%s/%s/%s.lnk", szRootDir, szGroupName, szLinkName);
    
else
        sprintf(szFullDir, 
"%s/%s.lnk", szRootDir, szLinkName);
    
    WCHAR wszFullDir[MAX_PATH];
    ::MultiByteToWideChar(
00, szFullDir, -1, wszFullDir, MAX_PATH);
    
    hr 
= spIPersistFile->Save(wszFullDir, FALSE);
    
if(FAILED(hr))
    
{
        
return false;  
    }

    
    ::SHChangeNotify(SHCNE_ALLEVENTS, SHCNF_PATH
|SHCNF_FLUSH, szFullDir, 0);  
    
return true;
}


/**
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    
     CoInitialize(NULL);


     char szDemoExeDir[MAX_PATH];
     char szExeFileName[MAX_PATH];

     GetModuleFileName(NULL, szExeFileName, MAX_PATH);

     sprintf(szDemoExeDir, szExeFileName);
     char szUnInstallDir[MAX_PATH];
     sprintf(szUnInstallDir, szExeFileName);
     
     CreateProgramGroup("Demo程序组");
     CreateLink("Demo", szDemoExeDir, FALSE, "Demo程序组");
     CreateLink("Demo", szDemoExeDir, TRUE, NULL);
     CreateLink("卸载Demo", szUnInstallDir, FALSE, "Demo程序组");
     
     CoUninitialize();
    
    return 0;
}
*/

 

c#通过纯代码创建桌面快捷方式、创建程序菜单项、将网页添加到收藏夹

c#通过纯代码创建桌面快捷方式、创建程序菜单项、将网页添加到收藏夹 本文章源代码Src下载地址:http://download.csdn.net/detail/testcs_dn/5141580 ...
  • testcs_dn
  • testcs_dn
  • 2013年03月14日 17:52
  • 17792

Linux中在应用程序菜单中添加快捷方式

比如我要将eclipse添加到菜单中,那么只需要在~/.local/share/applications/下新建一个.desktop文件,我命名为eclipse.desktop #sudo vi ec...
  • bill_chuang
  • bill_chuang
  • 2014年01月15日 16:36
  • 4624

如何在Linux的桌面上创建快捷方式或启动器

1使用命令行创建桌面快捷方式(h使用) 要为特定程序或命令创建桌面快捷方式,你可以使用任意文本编辑器创建一个.desktop文件,然后把它放到/usr/share/applications或者~/....
  • zhuiqiuk
  • zhuiqiuk
  • 2016年11月04日 16:23
  • 1421

vb为程序创建快捷方式到开始菜单中

  • 2010年06月19日 22:23
  • 2KB
  • 下载

创建快捷方式到桌面、任务栏、开始菜单、快速启动栏、程序组中

//得到快速启动栏的路径 BOOL GetIEQuickLaunchPath(WCHAR *pszIEQueickLaunchPath) { LPITEMIDLIST ppidl; i...
  • qingzai_
  • qingzai_
  • 2017年12月01日 16:35
  • 72

Vb添加开始菜单或桌面快捷方式,添加到收藏夹的代码

  • 2011年08月16日 09:42
  • 5KB
  • 下载

C#程序快捷方式菜单

  • 2010年06月20日 18:46
  • 41KB
  • 下载

C#快捷方式管理程序(游戏菜单)

  • 2017年05月20日 20:28
  • 234KB
  • 下载

创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)

首先需要获取三个路径 :桌面路径 、快速启动栏路径、 开始->程序组路径 //得到当前桌面路径 BOOL GetDesktopPath(char *pszDesktopPath) { L...
  • qq_25867649
  • qq_25867649
  • 2016年12月19日 15:57
  • 495

Qt之创建桌面和开始菜单快捷方式

将安装好的酷狗拷贝到C:\data目录中 1.创建桌面快捷方式 QFile::link("C:/data/KuGou.exe", QStandardPaths::writableLocation(...
  • caoshangpa
  • caoshangpa
  • 2017年01月02日 19:50
  • 2485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建程序菜单和快捷方式的代码
举报原因:
原因补充:

(最多只允许输入30个字)