• Delphi -- 创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜 单


    复制代码
    {=================================================================
    功 能:
    创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式
    参 数:
    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;
    复制代码

     http://www.cnblogs.com/shangdawei/p/4518740.html

  • 相关阅读:
    [C++]Linux之进程间通信小结【待完善】
    [转] thrift的使用介绍
    [转] splice系列系统调用
    [转] gdb中忽略信号处理
    [转] 确定性投资的框架
    [转] 投资策略及投资体系
    [转] 为什么医疗咨询服务公司Evolent Health仅用4年就华丽上市?
    [转] When exactly does the virtual table pointer (in C++) gets set for an object?
    [转] Linux写时拷贝技术(copy-on-write)
    [转] .bss段和.data段的区别
  • 原文地址:https://www.cnblogs.com/findumars/p/5243895.html
Copyright © 2020-2023  润新知