16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ソフトからショートカットを作る(修正版)"
この発言は #00094 あほうどり さんのソフトからショートカットを作る に対するコメントです
{
ソフトウェアからアプリのショートカットを作る手続きです。
削除も出来ます。
今回は Delphi 3 だけですが、Delphi 2.0 においてもほとんど同じです。
}
=========== Delphi 3 ====================================
uses に ShellAPI, SHLObj, ActiveX を追加
procedure CreateShortcut(pszDir, pszFile, pszAppName: PChar;
nLoca: Integer; fCreate: Boolean);
var
GMalloc: IMalloc;
sz : array[0..MAX_PATH] of Char;
szPath : array[0..MAX_PATH] of Char;
hr : HResult;
psl: IShellLink;
ppf: IPersistFile;
psf: IShellFolder;
pidl: PItemIDList;
StrRet: TStrRet;
wsz : PWChar;
begin
CoInitialize(nil);
ShGetMalloc(GMalloc);
hr := CoCreateInstance(CLSID_ShellLink,
nil,
CLSCTX_INPROC_SERVER,
IShellLink, // for 3.0 ActiveX
// IID_IShellLink, for 2.0 Ole2
psl);
if (Succeeded(hr)) then
begin
StrCopy(szPath, pszDir);
psl.SetWorkingDirectory(szPath);
StrCat(szPath, '\');
StrCat(szPath, pszFile);
psl.SetPath(szPath);
psl.SetDescription(pszAppName);
// 最少化で起動の場合
// psl.SetShowCmd(SW_SHOWMINNOACTIVE);
hr := psl.QueryInterface(IPersistFile, ppf); // for 3.0 ActiveX
// hr := psl.QueryInterface(IID_IPersistFile, ppf); for 2.0 Ole2
if (Succeeded(hr)) then
begin
SHGetDesktopFolder(psf);
SHGetSpecialFolderLocation(GetDesktopWindow, nLoca, pidl);
StrRet.uType := STRRET_CSTR;
psf.GetDisplayNameOf(pidl, SHGDN_FORPARSING, StrRet);
if pidl <> nil then GMalloc.Free(pidl);
StrCopy(sz, StrRet.cStr);
StrCat(sz, '\');
StrCat(sz, pszAppName);
StrCat(sz, '.lnk');
if fCreate then
begin
GetMem(wsz, SizeOf(WideChar) * MAX_PATH + 1);
try
MultiByteToWideChar(CP_ACP, 0, sz, -1, wsz, MAX_PATH);
hr := ppf.Save(wsz, True);
finally
FreeMem(wsz);
end;
end;
// psf.Release; only 2.0
// ppf.Release; only 2.0
end;
// psl.Release; only 2.0
end;
// GMalloc.Release; only 2.0
CoUninitialize;
if not fCreate then
DeleteFile(sz);
end;
あほうどり
Original document by あほうどり 氏 ID:(GGA00167)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|