我想得到桌面上的快捷方式的图标及其路径!!
我用IShellLink接口(Delphi6开发人员指南),取不到“我的电脑”,“网上邻居”的图标及它们的路径!!
哪位高手给出完整代码,至少给80分!(我是新来的最多只能出100分了)
我用IShellLink接口(Delphi6开发人员指南),取不到“我的电脑”,“网上邻居”的图标及它们的路径!!
哪位高手给出完整代码,至少给80分!(我是新来的最多只能出100分了)
var
FDir,
FName,
ExeName: PChar;
z: integer;
begin
ExeName:= StrAlloc(MAX_PATH);
FName:= StrAlloc(MAX_PATH);
FDir:= StrAlloc(MAX_PATH);
StrPCopy(FName, ExtractFileName(linkname));
StrPCopy(FDir, ExtractFilePath(linkname));
z:= FindExecutable(FName, FDir, ExeName);
if z > 32 then
Result:= StrPas(ExeName)
else
Result:= ';
StrDispose(FDir);
StrDispose(FName);
StrDispose(ExeName);
end;
Registry,
ActiveX,
ComObj,
ShlObj; type
ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER); function CreateShortcut(SourceFileName: string; // the file the shortcut points to
Location: ShortcutType; // shortcut location
SubFolder, // subfolder of location
WorkingDir, // working directory property of the shortcut
Parameters,
Description: string): // description property of the shortcut
string;
const
SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer';
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv';
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
Directory, LinkName: string;
WFileName: WideString;
Reg: TRegIniFile;
begin MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile; MySLink.SetPath(PChar(SourceFileName));
MySLink.SetArguments(PChar(Parameters));
MySLink.SetDescription(PChar(Description)); LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName); // Quicklauch
if Location = _QUICKLAUNCH then
begin
Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
try
Directory := Reg.ReadString('MapGroups', 'Quick Launch', '');
finally
Reg.Free;
end;
end
else
// Other locations
begin
Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
try
case Location of
_OTHERFOLDER : Directory := SubFolder;
_DESKTOP : Directory := Reg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU : Directory := Reg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO : Directory := Reg.ReadString('Shell Folders', 'SendTo', '');
end;
finally
Reg.Free;
end;
end; if Directory <> '' then
begin
if (SubFolder <> '') and (Location <> _OTHERFOLDER) then
WFileName := Directory + '\' + SubFolder + '\' + LinkName
else
WFileName := Directory + '\' + LinkName; if WorkingDir = '' then
MySLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFileName))); MyPFile.Save(PWChar(WFileName), False);
Result := WFileName;
end;
end; function GetProgramDir: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False);
Result := reg.ReadString('Programs');
reg.CloseKey;
finally
reg.Free;
end;
end; // Some examples: procedure TForm1.Button1Click(Sender: TObject);
const
PROGR = 'c:\YourProgram.exe';
var
resPath: string;
begin
//Create a Shortcut in the Quckick launch toolbar
CreateShortcut(PROGR, _QUICKLAUNCH, '','','','Description'); //Create a Shortcut on the Desktop
CreateShortcut(PROGR, _DESKTOP, '','','','Description'); //Create a Shortcut in the Startmenu /"Programs"-Folder
resPath := CreateShortcut(PROGR, _OTHERFOLDER, GetProgramDir,'','','Description');
if resPath <> '' then
begin
ShowMessage('Shortcut Successfully created in: ' + resPath);
end;
end;
function PutselfToDesktop(TargetName,Mycaption,DispInfo:String):boolean;
{________________________________________________
| Mycaption:快捷方式标题 |
| TargetName:快捷方式指向的文件,需包含完整路径| |
| DispInfo:快捷方式提示信息 可为空 |
| win2000指向快捷方式时可显示win98下无用 |
|________________________________________________}
var
IObject : IUnknown;
ISLink : IShellLink;
IPFile : IPersistFile;
PIDL : PItemIDList;
InFolder : array[0..MAX_PATH] of Char;
TargetName : String;
LinkName : WideString;
begin
if not fileexists(TargetName) then Exit;
if mycaption='' then Exit;
IObject := CreateComObject(CLSID_ShellLink);
ISLink := IObject as IShellLink;
IPFile := IObject as IPersistFile;
with ISLink do begin
SetPath(pChar(TargetName));
SetWorkingDirectory
(pChar(ExtractFilePath(TargetName)));
SetDescription(pchar(DispInfo));
end;
// 在桌面上建立
SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);
SHGetPathFromIDList(PIDL, InFolder);
LinkName := InFolder + '\'+mycaption+'.lnk';
IPFile.Save(PWChar(LinkName), false);
//在程序组中建立
SHGetSpecialFolderLocation(0,CSIDL_STARTMENU , PIDL);
SHGetPathFromIDList(PIDL, InFolder);
LinkName := InFolder + '\程序\'+mycaption+'.lnk';
IPFile.Save(PWChar(LinkName), false);
result:=true;
end;
的图标,并在edit1上显示“我的电脑”的路径。给出代码马上给分,至少80分。
我的电脑和网上邻居是系统项,楼上说得对,在注册表里,但具体GUID是什么我也忘了
var
sfi:TShFileInfo;
pidl: PItemIDList;
begin
if Succeeded(SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, Pidl)) then
begin
ShGetFileInfo(PChar(pidl), 0, sfi, sizeof(sfi), SHGFI_ICON or SHGFI_PIDL);
Image1.Picture.Icon.Handle := sfi.hIcon;
end;
end;
to papaya_stone(^_^)shentong(^_^) :用你给的
函数无法取得word在桌面的快捷方式的正确路径。
因为,将取得的路径用ShellExecute打不开word程序。
有谁知道怎么取得像word,excel等的桌面快捷方式的
路径,并执行word程序吗??