[PR]

水無瀬の部屋 > Programming > sample > sendsend > sendto.cpp
最終更新日: 2007/10/24

   1: //*********************************************************
   2: // プロジェクト: Send to 'SendTo'
   3: //   ファイル名: sendto.cpp
   4: //*********************************************************
   5: #include "sendto.h"
   6: 
   7: 
   8: //---------------------------------------------------------
   9: // テスト関数 の 宣言
  10: //---------------------------------------------------------
  11: DECLARE_TESTPROC( test_MakeShellLinkFileName );
  12: 
  13: 
  14: //---------------------------------------------------------
  15: // マクロ の 定義
  16: //---------------------------------------------------------
  17: #define EXT_LNK  ".lnk"
  18: 
  19: 
  20: //---------------------------------------------------------
  21: // ファイルスコープ関数 の 宣言
  22: //---------------------------------------------------------
  23: static void MakeShellLinkFileName( char *buffer, size_t bufsize, const char *path, const char *target, bool bNoExt );
  24: 
  25: 
  26: //*********************************************************
  27: // SendToPath
  28: //*********************************************************
  29: void
  30: SendToPath
  31: 	(
  32: 		const char *target, // リンク先
  33: 		const char *path,   // ショートカットの作成先フォルダのパス
  34: 		      bool  bNoExt  // ショートカット名に元ファイルの拡張子を含めるかどうか
  35: 	)
  36: {
  37: 	CALLONCE_TESTPROC( test_MakeShellLinkFileName ); // [テスト]
  38: 
  39: 	// パラメタの仮定
  40: 	ASSERT( IsPathExist( target ) );
  41: 	ASSERT( IsPathDirectory( path ) );
  42: 
  43: 	// 作業フォルダ名の作成
  44: 	char workdir[ MAX_PATH_BUF ];
  45: 	GetFileLocation( target, workdir, numof( workdir ) );
  46: 
  47: 	// リンク名の作成
  48: 	char lnkname[ MAX_PATH_BUF ];
  49: 	const char *filename = GetFileNamePtr( target );
  50: 	MakeShellLinkFileName( lnkname, numof( lnkname ), path, filename, bNoExt );
  51: 
  52: 	// ショートカットの作成
  53: 	VERIFY( CreateShellLinkFile( CLSCTX_INPROC_SERVER, lnkname, target, null, workdir, SW_SHOWNORMAL, true ) );
  54: 	ASSERT( IsPathExist( lnkname ) );
  55: 
  56: }//SendToPath
  57: 
  58: 
  59: //******************************************************************************************************************
  60: // private
  61: //******************************************************************************************************************
  62: //*********************************************************
  63: // MakeShellLinkFileName
  64: //*********************************************************
  65: static
  66: void
  67: MakeShellLinkFileName
  68: 	(
  69: 		      char   *buffer,
  70: 		      size_t  bufsize,
  71: 		const char   *path,     // 場所
  72: 		const char   *filename, // ファイル名
  73: 		      bool    bNoExt    // ショートカット名に元ファイルの拡張子を含めるかどうか
  74: 	)
  75: {
  76: 	// パラメタの仮定
  77: 	ASSERT( IsEnoughPathBufferSize( bufsize ) ); // [WARN]
  78: 	ASSERT( IsValidStringBufferPtr( buffer, bufsize ) );
  79: 	DESTROY_TEXT_BUFFER( buffer, bufsize ); // [破壊]
  80: 	ASSERT( IsValidLocalPathString( filename ) );
  81: 	ASSERT( IsValidLocalPathString( path ) );
  82: 
  83: 	// リンク名の作成
  84: 	MakeFullPath( buffer, bufsize, path, filename );
  85: 	if ( bNoExt )
  86: 	{
  87: 		CutFileExtension( buffer );
  88: 	}
  89: 	strputs( buffer, bufsize, strlen(buffer), EXT_LNK );       
  90: 
  91: }//MakeShellLinkFileName
  92: 
  93: 
  94: //******************************************************************************************************************
  95: // TEST
  96: //******************************************************************************************************************
  97: 
  98: 
  99: #ifdef _DEBUG // デバッグ時のみ
 100: 
 101: 
 102: //*********************************************************
 103: // test_MakeShellLinkFileName
 104: //*********************************************************
 105: DEFINE_TESTPROC( test_MakeShellLinkFileName )
 106: {
 107: 	//---------------------------------------------------------
 108: 	// 定数 の テスト
 109: 	//---------------------------------------------------------
 110: 
 111: 
 112: 	//---------------------------------------------------------
 113: 	// ファイルスコープ関数 の テスト
 114: 	//---------------------------------------------------------
 115: 
 116: 	// MakeShellLinkFileName()
 117: 	{
 118: 		const struct 
 119: 			{
 120: 				const char *path;
 121: 				const char *base;
 122: 				const char *name;
 123: 				      bool  flag;
 124: 			}
 125: 		testcase[] =
 126: 			{
 127: #define MAKE_TESTCASE( path, base, name, flag ) { path, base, name, flag }
 128: 				MAKE_TESTCASE( "base\\name.lnk",     "base", "name", true ),
 129: 				MAKE_TESTCASE( "base\\name.lnk",     "base", "name", false ),
 130: 				MAKE_TESTCASE( "base\\name.lnk",     "base", "name.ext", true ),
 131: 				MAKE_TESTCASE( "base\\name.ext.lnk", "base", "name.ext", false ),
 132: #undef MAKE_TESTCASE
 133: 			};
 134: 		{for( int i = 0; i < numof( testcase ); ++i )
 135: 		{
 136: 			char buf[ MAX_PATH_BUF ];
 137: 			MakeShellLinkFileName( buf, numof( buf ), testcase[ i ].base, testcase[ i ].name, testcase[ i ].flag );
 138: 			VERIFY( streql( buf, testcase[ i ].path ) );
 139: 		}}
 140: 	}
 141: 
 142: 
 143: 
 144: 	//---------------------------------------------------------
 145: 	// 公開関数 の テスト
 146: 	//---------------------------------------------------------
 147: 
 148: 
 149: }//test_MakeShellLinkFileName
 150: 
 151: 
 152: #endif // #ifdef _DEBUG
 153: 
 154: 
 155: //** end **
 156: 

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > sendsend > sendto.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/sendsend/sendto_cpp.shtml
『新妻LOVELY×CATION』を応援しています!