创建桌面快捷方式和开始启动项

来源:互联网 发布:js修改offsetleft 编辑:程序博客网 时间:2024/05/14 21:05
2010-11-10 21:31:46
#include <afx.h>
#include<direct.h>
#include<stdlib.h>
#include "Shlwapi.h"
#include <Tlhelp32.h>
#pragma comment(lib,"shlwapi.lib")

void CreateKeyBoard();
BOOL CreateLink(LPSTR szPath,LPSTR szLink);
void NotifyShell(LONG wEventId,LPSTR szPath);

void CreateKeyBoard()
{
    HRESULT hr = CoInitialize(NULL);
    TCHAR   szPath[MAX_PATH];
    int   iRet;
    CString strprogram;
    CString strdesktop;
    CString strswp;
    BOOL bExist=FALSE;
    char szlnk[MAX_PATH]="";

    
//快速启动程序,在C盘的目录
    
//C:/Documents and Settings/All Users/「开始」菜单/程序
    memset(szPath,0,sizeof(szPath)); 
    iRet = SHGetSpecialFolderPath(NULL,szPath,CSIDL_COMMON_PROGRAMS,0); 
    strprogram.Format("%s",szPath);

    
//桌面文件,在C盘的目录
    
//C:/Documents and Settings/All Users/桌面
    memset(szPath,0,sizeof(szPath)); 
    iRet = SHGetSpecialFolderPath(NULL,szPath,CSIDL_COMMON_DESKTOPDIRECTORY,0); 
    strdesktop.Format("%s",szPath);

    strswp.Format("%s//测试程序",strprogram);
    bExist=PathFileExists(strswp);
    if (!bExist)
    {
        
//快速启动创建"测试程序"
        _mkdir(strswp);
    }

    
//桌面创建快捷方式
    strswp.Format("%s//testMFC.lnk",strdesktop);
    strcpy(szlnk,strswp.GetBuffer(strswp.GetLength()+1));

    
//桌面上的文件和源文件进行连接
    CreateLink("D://MFC_App//testMFC.exe",szlnk);    
    NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,szlnk); 
//通知shell有关变化
    strswp.ReleaseBuffer();

    
//在开始中设置: 快速启动
    strswp.Format("%s//测试程序//testMFC.lnk",strprogram
);
    strcpy(szlnk,strswp.GetBuffer(strswp.GetLength()+1));
    CreateLink("D://MFC_App//testMFC.exe",szlnk);    
    NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,szlnk); 
//通知shell有关变化
    strswp.ReleaseBuffer();
}

BOOL CreateLink(LPSTR szPath,LPSTR szLink)
{
    HRESULT hres ;
    IShellLink * psl ;
    IPersistFile* ppf ;
    WORD wsz[ MAX_PATH] ;

    hres = CoCreateInstance( CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER, IID_IShellLink,(void **)&psl) ;
    if( FAILED( hres))
        return FALSE ;
    
    psl -> SetPath( szPath) ; 
//设置目标应用程序

    
//设置快捷键(此处设为Shift+Ctrl+'R')
    psl -> SetHotkey( MAKEWORD( 'R',HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;

    
//从IShellLink获取其IPersistFile接口,用于保存快捷方式的数据文件 (*.lnk)
    hres = psl -> QueryInterface( IID_IPersistFile,    (void**)&ppf) ;
    if( FAILED( hres))
        return FALSE ;

    
//确保数据文件名为ANSI格式
    MultiByteToWideChar( CP_ACP, 0, szLink, -1, wsz, MAX_PATH) ;

    
//调用IPersistFile::Save
    
//保存快捷方式的数据文件 (*.lnk)
    hres = ppf -> Save( wsz, STGM_READWRITE) ;

    
//释放IPersistFile和IShellLink接口
    ppf -> Release( ) ;
    psl -> Release( ) ;

    return TRUE;
}

// 通知shell有关变化
void NotifyShell(LONG wEventId,
//事件标志
                               LPSTR szPath)
//路径
{    
    SHChangeNotify( wEventId,
        SHCNF_FLUSH | SHCNF_PATH,
        szPath,0);

    
//取得szPath的父目录
    char* p;
    for( p=szPath+lstrlen(szPath)-1;
    *!= '//'; 
    p--);
    *p='/0';

    SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH,szPath,0);
}

void CWebProcDirDlg::OnButton7() 
{
    CreateKeyBoard();    
}
原创粉丝点击