水無瀬の部屋 > Programming > sample > atlnk > atlnk.cpp |
---|
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 **
参照:
水無瀬の部屋 > 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