{=================================================================
    功    能:
            创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式
    参     数:
            FileName     : 快捷方式执行文件名
            Description  : 快捷方式描述信息
            Arguements   : 快捷方式执行参数
            ShowName     : 快捷方式显示名称
            Location     : 快捷方式类别
            id           : 需设置状态的队列号(255 为设置)
            CreateOrDelete: 是创建还是删除(默认为创建 true)
    返 回 值: 无
    备    注:
            需要引用 Registry, ShlObj, ComObj, ActiveX, RegStr 单元
=================================================================}
procedure TMainForm.CreateShortcut(FileName,Description,Arguements,ShowName: string;
  Location: ShortcutType; id: byte; CreateOrDelete: boolean=true);
var
  cObj :IUnknown;
  sLink :IShellLink;
  pFile :IPersistFile;
  sDir,spath,key,tmp :string;
  wFileName :WideString;
  mReg :TRegistry;
begin

  cObj :=CreateComObject(CLSID_ShellLink); //创建COM对象
  sLink :=cObj as IShellLink; //COM对象转化为IShellLink型接口
  pFile :=cObj as IPersistFile; //COM对象转化为IPersistFile型接口

  //获取路径
  sPath :=ExtractFilePath(FileName);
  with sLink do begin
    SetPath(PChar(FileName)); //设置执行文件名
    SetArguments(PChar(arguements)); //设置执行参数
    SetDescription(Pchar(Description)); //设置描述信息
    SetWorkingDirectory(PChar(sPath)); //设置工作路径,即执行程序所在目录
  end;

  //获取各快捷方式的实际目录
  mReg :=TRegistry.Create;
  with mReg do begin
    if Location=ST_CONTEXT then //添加右键菜单
    begin
      RootKey :=HKEY_CLASSES_ROOT;
      tmp:= '*shell'+ShowName;
      if CreateOrDelete then
      begin
        if OpenKey(tmp,true) then
        begin
          //用writestring将设置值写入打开的主键
          WriteString('',ShowName+'(&k)');
          CloseKey;
        end;
        if OpenKey(tmp+'command',true) then
        begin
          //command子键的内容是点击右键后选择相应项后要运行的程序;
          //%1是在单击右键时选中的文件名
          //WriteString(,'c:delphimyprogram.exe+"%1"');
          WriteString('',FileName);
          CloseKey;
        end;
      end
      else
        DeleteKey(tmp);
      Free;
      exit;
    end;

    RootKey :=HKEY_CURRENT_USER;
    key :=REGSTR_PATH_EXPLORER; //Delphi在单元RegStr中定义的常量
    tmp :=key + 'Shell Folders';
    OpenKey(tmp, false);
    case Location of
      ST_DESKTOP: sDir :=ReadString('Desktop');
      ST_SENDTO: sDir :=ReadString('SendTo');
      ST_STARTMENU: sDir :=ReadString('Start Menu');
      ST_PROGRAMS: sDir :=ReadString('Programs');
      ST_QUICKLAUNCH:
      begin
        sDir :=ReadString('AppData');
        sDir :=sDir + 'MicrosoftInternet ExplorerQuick Launch';
      end;
    end;

    //生成快捷方式文件名
    if ShowName='' then
    begin
      ShowName :=ChangeFileExt(FileName, '.Lnk');
      ShowName :=ExtractFileName(ShowName);
    end
    else
      ShowName:= ShowName+'.lnk';
    if sDir<>'' then
    begin
      //生成快捷方式全路径名
      wFileName :=sDir + '' + ShowName;
      if (id<255) then
      begin
        if FileExists(wFileName) then
          //RzCheckGroup1.ItemChecked[id]:= true;
      end
      else
        //保存或删除生成的快捷方式文件
        if CreateOrDelete then
          pFile.Save(PWChar(wFileName), false)
        else
          DeleteFile(wFileName);
    end;

    Free;
  end;
end;

转载于:https://blog.51cto.com/bigpower/109289

创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式...相关推荐

  1. 如何创建Win 7系统快速启动栏

    如何创建Win 7系统快速启动栏 按鼠标右键点击任务在 工具栏 新建工具栏, 在空白处输入如下内容:"%UserProfile%\AppData\Roaming\Microsoft\Inte ...

  2. SharePoint 2010 如何隐藏快速启动栏,顶部导航及Ribbon菜单

    新建Application页面默认会显示快速启动栏,顶部导航及Ribbon菜单.如果你想在对话框框架(Dialog Framework)里打开该application页面,这些东西会占用很多空间,让你 ...

  3. 怎么把桌面计算机放到快速启动栏,怎么把桌面图标放到快速启动栏

    1. 如何把桌面图标放于快速启动栏 拖动图标到任务栏,之后删除桌面图标 不行的话 点击"开始"菜单→"运行"命令,在弹出的"运行"对话框中输 ...

  4. 如何添加显示桌面图标置于快速启动栏

    点击"开始→运行",在弹出的"运行"对话框中输入"REGSVR32 /n /i:u shell32"(不含双引号),然后回车,片刻后会弹出& ...

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

    首先需要获取三个路径 :桌面路径 .快速启动栏路径. 开始->程序组路径 //得到当前桌面路径 BOOL GetDesktopPath(char *pszDesktopPath) { LPITE ...

  6. win7 如何设置快速启动栏

    Windows 7的装后发现,以前的"快速启动栏"已经消失了.这对某些用户来说可能会很不习惯(至少我是这样),然而Windows 7任务栏提供的SuperBar区域并不适合放置太多 ...

  7. 快速启动栏增强工具 Free Launch Bar

    以前看到别人的快速启动栏里边的文件夹是菜单形式的,而自已在里面放个文件夹只是个图标而已.非常之羡慕,在网上搜索了下,大家都说什么解锁工具栏,然后在上面新建一个工具栏,选中目的文夹,将新的工具栏长度调窄 ...

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

    //得到快速启动栏的路径 BOOL GetIEQuickLaunchPath(WCHAR *pszIEQueickLaunchPath) {LPITEMIDLIST ppidl;if (SHGetSp ...

  9. 如何在Windows中将“显示桌面”图标移动到快速启动栏或任务栏

    If you aren't a fan of scrolling your pointer over to the lower right corner of your monitor to show ...

最新文章

  1. 谷歌AI新技术:通过追踪虹膜,普通摄像头也能测距
  2. sellhis股票平面图
  3. iOS 5将加入全新的通知信息和桌面Widgets
  4. 有关家居产品设计的外国专著_为啥外国的二手家具被称为vintage,中国就叫破烂?差在哪儿了?...
  5. Apache SolrCloud安装
  6. ssis修改数据库数据_SSIS平衡数据分配器概述
  7. JavaScript中Write和Writeln的区别
  8. error C2864 只有静态常量整型数据成员才可以在类中初始化
  9. atitit.404错误的排查流程总结vOa6
  10. RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用
  11. 好看的php表格样式,分享四个非常好看实用的CSS样式表格
  12. matlab排队模型和排队系统仿真
  13. 查看计算机bios版本,如何查看电脑BIOS版本
  14. TCP协议:RST标志位
  15. 需要系数 计算机房,计算电流及需要系数表.xls
  16. Linux 查看ip没有ens33解决方法
  17. 用计算机唱歌弹奏china,新目标英语专题练习:句型转换(附答案)
  18. 哈工大2021软件构造lab1总结
  19. windows中oracle自动备份
  20. 7-2 江学长的游戏

热门文章

  1. 无人驾驶卡车实现量产 主线科技6个月完成13辆商业交付
  2. AI帮你靠“想象”打字:手机电脑软键盘也能盲打了,准确率能达到95%
  3. Mac系统兼容软件 CrossOver 试用到期了怎么办
  4. 通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
  5. 复习webpack的常用loader
  6. 罗田用好“大数据”力促扶贫更精准
  7. mysql延迟判断模板
  8. IT民工系列——c#操作Microsoft IE,实现自动登录吧!
  9. RLC协议简单理解2-RLC窗口的维护
  10. 云计算技术 — 数据中心基础架构变迁史