예제 프로그램을 만들어 봤습니다.
/*
note:시작메뉴 및 바탕화면등에 바로가기아이콘을 생성
여기서 경로는 실행파일 포함한 패스이고
패스는 실행파일을 제외한 패스이다.
=Parameter=
LnkTarget : 실행 시킬 파일 패스
LnkName : 바로가기로 등록될 이름
strpecialFolder : 생성될 경로(예: 바탕화면 경로명 등)
LnkDescription : 마우스를 올렸을 때 뜨는 팁
IconLocation : 생성될 아이콘 패스
IconIndex : 보통 0를 한다.
*/
BOOL CreateShortCut(CString LnkTarget, CString LnkName,
CString strpecialFolder, CString LnkDescription,
CString IconLocation, UINT IconIndex)
{
HRESULT hr;
CFile cfFull;
CString sExePath, sExe, sSpecialFolder;
char *chTmp = sExePath.GetBuffer(MAX_PATH);
GetModuleFileName(NULL, chTmp, MAX_PATH);
sExePath.ReleaseBuffer();
// Find the Special Folder:
sSpecialFolder = strpecialFolder;
sSpecialFolder += LnkName + "." + "lnk";
if(LnkTarget == "_this")
{
cfFull.SetFilePath(sExePath);
sExe = cfFull.GetFileName();
sExe.Delete(sExe.Find(".") + 1, 3);
}
else
{
sExePath = LnkTarget;
}
// Create the ShortCut:
CoInitialize(NULL);
BOOL bRet = FALSE;
IShellLink* psl;
if (SUCCEEDED( CoCreateInstance(CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(LPVOID*) &psl)))
{
IPersistFile* ppf;
//
psl->SetPath(sExePath);
psl->SetDescription(LnkDescription);
if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf)))
{
WORD wsz[MAX_PATH];
MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
sSpecialFolder,
-1,
wsz,
MAX_PATH);
/* Call IShellLink::SetIconLocation with the file containing
the icon and the index of the icon */
if(!IconLocation.IsEmpty())
{
hr = psl->SetIconLocation(IconLocation, IconIndex);
#ifdef _DEBUG
if(FAILED(hr))
TRACE("IconLocation not changed!\n");
#endif
}
if(SUCCEEDED(ppf->Save(wsz, TRUE)))
{
bRet = TRUE;
}
ppf->Release();
}
psl->Release();
}
if(bRet)
{
TRACE("Lnk Written!\n");
}
else
{
TRACE("Lnk NOT Written! CreateShortCut(...) failed!\n");
}
return bRet;
}
'프로그래밍 팁 > etc' 카테고리의 다른 글
유니코드 구분 예제 (1) | 2010.06.08 |
---|---|
클립보드에 문자넣기 (2) | 2010.05.15 |
메모리 정보 확인 (0) | 2010.04.20 |
하드디스크 용량확인 (0) | 2010.04.19 |
네트워크 정보(사운드카드, 맥어드레스, IP주소) (0) | 2010.04.17 |