#include "stdafx.h"
#include "dkutilShell.h"
#include "dkutilDefined.h"

#ifdef USE_DKINGYO_SHELL_AND_COMMON_CONTROL




namespace dkutil{


/*
		☆デスクトップフォルダパス取得

		デスクトップフォルダのパスを取得します。

	input
		char *pPath			: デスクトップフォルダを受け取る文字列ポインタ

	output
		bool	: 成功 true / 失敗 false
*/

bool GetDesktopFolder( char *pPath )
{
	pPath[0] = '\0';

	ITEMIDLIST *pidl = NULL;
	IMalloc *pMalloc = NULL;
	char temp[MAX_PATH] = "";

	if FAILED( ::SHGetMalloc( &pMalloc ) ) return false;

	::SHGetSpecialFolderLocation( ::GetDesktopWindow(), CSIDL_DESKTOP, &pidl );
	::SHGetPathFromIDList( pidl, temp );

	pMalloc->Free( pidl );
	pMalloc->Release();

	strncpy( pPath, temp,MAX_PATH );

	return true;
}
/*

		☆ショートカット生成

		ショートカットを生成します。

	input
		char *pShortcutFile		: 作成する[*.lnk]のフルパス名
		char *pDescription		: ディスクリプション名
		char *pTargetFile		: リンク元のファイルのフルパス名

	output
		bool	: 成功 true / 失敗 false

*/
bool CreateLinkFile( char *pShortcutFile, char *pDescription, char *pTargetFile )
{
	HRESULT hr;
	WCHAR wShortcutFile[MAX_PATH];
	IShellLink *pShellLink = NULL; 
	IPersistFile *pPersistFile = NULL;
	
	bool result = false;
	
	//==============================================
	// IShellLink インターフェースの取得
	//==============================================
	hr = ::CoCreateInstance(
				CLSID_ShellLink,
				NULL,
				CLSCTX_ALL,
				IID_IShellLink,
				(void **)&pShellLink );
	if FAILED( hr ) goto END;
	
//	==============================================
	 //IPersistFileインターフェースの取得
	//==============================================
	hr = pShellLink->QueryInterface( IID_IPersistFile, (void **)&pPersistFile );
	if FAILED( hr ) goto END;
	
	//==============================================
	// リンク元のファイルのパスをセットする
	//==============================================
	hr = pShellLink->SetPath( pTargetFile );
	if FAILED( hr ) goto END;

	//==============================================
	// ショートカットファイルのディスクリプションをセット
	//==============================================
	hr = pShellLink->SetDescription( pDescription );
	if FAILED( hr ) goto END;

	::MultiByteToWideChar( CP_ACP, 0, pShortcutFile, -1, wShortcutFile, MAX_PATH );
	hr = pPersistFile->Save( wShortcutFile, true );
	if FAILED( hr ) goto END;

	result = true;

END:
	if ( pShellLink != NULL ) pShellLink->Release();
	if ( pPersistFile != NULL ) pPersistFile->Release();

	return result;
}



}//end of dkutil namespace


#endif //end of USE_DKINGYO_SHELL_AND_COMMON_CONTROL