[PR]

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

   1: //*********************************************************
   2: // プロジェクト: atlnk - @link.target
   3: //   ファイル名: atlnk.cpp
   4: //*********************************************************
   5: #include "atlnk.h"    //
   6: #include "custom.h"   //
   7: #include "shitemid.h" //
   8: #include "cmdline.h"  //
   9: #include <misc/pathargv.h>
  10: 
  11: 
  12: //---------------------------------------------------------
  13: // テスト関数 の 宣言
  14: //---------------------------------------------------------
  15: DECLARE_TESTPROC( test_GetApplicationMode );
  16: 
  17: 
  18: //---------------------------------------------------------
  19: // マクロ定数 の 定義
  20: //---------------------------------------------------------
  21: //
  22: #define MUTEX_INSTALLDLG  ( "atlnk.InstallDlg" )
  23: //
  24: #define MAX_CMDLINE       ( 1024 )
  25: //
  26: #define DEFAULT_VERB      "open"
  27: //
  28: #define MODE_ATLNK        ( 1 )  // リンク先を探す
  29: #define MODE_INSTALL      ( 2 )  // インストール
  30: 
  31: 
  32: //---------------------------------------------------------
  33: // ファイルスコープ関数 の 宣言
  34: //---------------------------------------------------------
  35: static int GetApplicationMode( int argc, char **argv );
  36: static int CommandLineApplicationMainProc( HINSTANCE hInstance, int argc, char **argv );
  37: static int ApplicationInstallMainProc( HINSTANCE hInstance, int argc, char **argv );
  38: static HINSTANCE ITEMIDLIST_ShellExecute( HWND hWnd, const char *verb, const ITEMIDLIST *pidl, const char *lpParameters, const char *lpDirectory, int nShowCmd );
  39: 
  40: 
  41: //*********************************************************
  42: // ApplicationMainProc
  43: //*********************************************************
  44: int
  45: ApplicationMainProc
  46: 	(
  47: 		HINSTANCE   hInstance,
  48: 		int         argc,
  49: 		char      **argv
  50: 	)
  51: {
  52: 	CALLONCE_TESTPROC( test_GetApplicationMode ); // [テスト]
  53: 
  54: 	// パラメタの仮定
  55: 	ASSERT( IsValidInstanceHandle( hInstance ) );
  56: 	ASSERT( IsValidArgcArgv( argc, argv ) );
  57: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
  58: 
  59: 	//
  60: 	const int mode = GetApplicationMode( argc, argv );
  61: 	switch( mode )
  62: 	{
  63: 		default:           return EXIT_FAILURE;
  64: 		case MODE_ATLNK:   return CommandLineApplicationMainProc( hInstance, argc, argv );
  65: 		case MODE_INSTALL: return ApplicationInstallMainProc( hInstance, argc, argv );
  66: 	}	
  67: }//ApplicationMainProc
  68: 
  69: 
  70: //******************************************************************************************************************
  71: // private
  72: //******************************************************************************************************************
  73: //*********************************************************
  74: // GetApplicationMode
  75: //*********************************************************
  76: static
  77: int
  78: GetApplicationMode
  79: 	(
  80: 		int    argc,
  81: 		char **argv
  82: 	)
  83: {
  84: 	// パラメタの仮定
  85: 	ASSERT( IsValidArgcArgv( argc, argv ) );
  86: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
  87: 
  88: 	// 引数が無ければ 設定 モード
  89: 	return (1 < argc) ? MODE_ATLNK : MODE_INSTALL ;
  90: }//GetApplicationMode
  91: 
  92: 
  93: //******************************************************************************************************************
  94: // private - MODE_INSTALL
  95: //******************************************************************************************************************
  96: //*********************************************************
  97: // ApplicationInstallMainProc
  98: // アプリケーション を ショートカットファイル に 関連付ける
  99: //*********************************************************
 100: static
 101: int
 102: ApplicationInstallMainProc
 103: 	(
 104: 		HINSTANCE   hInstance,
 105: 		int         argc,
 106: 		char      **argv
 107: 	)
 108: {
 109: 	// パラメタの仮定
 110: 	ASSERT( IsValidInstanceHandle( hInstance ) );
 111: 	ASSERT( IsValidArgcArgv( argc, argv ) );
 112: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
 113: 
 114: 	//
 115: 	HANDLE hMutex = CreateMutexOnce( MUTEX_INSTALLDLG );
 116: 	if ( hMutex )
 117: 	{
 118: 		InstallDlg( HWND_DESKTOP );
 119: 		VERIFY( CloseHandle( hMutex ) );
 120: 	}
 121: 
 122: 	return EXIT_SUCCESS;
 123: }//ApplicationInstallMainProc
 124: 
 125: 
 126: //******************************************************************************************************************
 127: // private - MODE_ATLNK
 128: //******************************************************************************************************************
 129: //*********************************************************
 130: // CommandLineApplicationMainProc
 131: // ショートカット の リンク先 がある フォルダ を 開く
 132: //*********************************************************
 133: static
 134: int
 135: CommandLineApplicationMainProc
 136: 	(
 137: 		HINSTANCE   hInstance,
 138: 		int         argc,
 139: 		char      **argv
 140: 	)
 141: {
 142: 	// パラメタの仮定
 143: 	ASSERT( IsValidInstanceHandle( hInstance ) );
 144: 	ASSERT( IsValidArgcArgv( argc, argv ) );
 145: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
 146: 
 147: 	//
 148: 	char verb[ 1+MAX_CMDLINE ];
 149: 	VERIFY( get_cmdline_option( verb, numof( verb ), argc, argv ) );
 150: 
 151: 	//
 152: 	int count;
 153: 	char **paths = GetPathArgcArgv( &count, argc - 1 , argv + 1 );
 154: 	if ( paths )
 155: 	{
 156: 		VERIFY( OpenLinkTargetLocation( count, paths, (('\0' != verb[0]) ? verb : DEFAULT_VERB) ) );
 157: 
 158: 		VERIFY( ReleasePathArgcArgv( count, paths ) );
 159: 	}
 160: 
 161: 	return EXIT_SUCCESS;
 162: }//CommandLineApplicationMainProc
 163: 
 164: 
 165: //******************************************************************************************************************
 166: // TEST
 167: //******************************************************************************************************************
 168: 
 169: 
 170: #ifdef _DEBUG // デバッグ時のみ
 171: 
 172: 
 173: #include "info.h"
 174: 
 175: 
 176: //*********************************************************
 177: // test_GetApplicationMode
 178: //*********************************************************
 179: DEFINE_TESTPROC( test_GetApplicationMode )
 180: {
 181: 	//---------------------------------------------------------
 182: 	// 定数 の テスト
 183: 	//---------------------------------------------------------
 184: 
 185: 	// MUTEX_INSTALLDLG
 186: 	ASSERT( IsValidMutexName( MUTEX_INSTALLDLG ) );
 187: 
 188: 	// DEFAULT_VERB
 189: 	ASSERT( IsValidCommandLineString( DEFAULT_VERB ) );
 190: 
 191: 
 192: 	//---------------------------------------------------------
 193: 	// ファイルスコープ関数 の テスト
 194: 	//---------------------------------------------------------
 195: 
 196: 	// GetApplicationMode()
 197: 	{
 198: 		// MODE_INSTALL
 199: 		{
 200: 			char *argv[] = { "", null };
 201: 			argv[ 0 ] = __argv[ 0 ]; // 自分自身へのパス
 202: 			VERIFY( MODE_INSTALL == GetApplicationMode( numof(argv)-1, argv ) );
 203: 		}
 204: 
 205: 		// MODE_ATLNK
 206: 		{
 207: 			char *argv[] = { "", "", null };
 208: 			argv[ 0 ] = __argv[ 0 ]; // 自分自身へのパス
 209: 			VERIFY( MODE_ATLNK == GetApplicationMode( numof(argv)-1, argv ) );
 210: 		}
 211: 	}
 212: 
 213: 
 214: 	//---------------------------------------------------------
 215: 	// 公開関数 の テスト
 216: 	//---------------------------------------------------------
 217: 	{ char buf[ 1 ]; make_cmdline( buf, numof(buf), null ); }
 218: 	{ install_t install; VERIFY( LoadInstallInfo( &install ) ); }
 219: 
 220: 
 221: }//test_GetApplicationMode
 222: 
 223: 
 224: #endif // #ifdef _DEBUG
 225: 
 226: 
 227: //** end **

参照:


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

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

水無瀬の部屋 > sample > atlnk > atlnk.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/atlnk/atlnk_cpp.shtml
同人ダウンロード販売
同人ダウンロード販売|DL.Getchu.com