예제 프로그램을 만들어 봤습니다.


/*
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
Posted by 띠깜
,