水無瀬の部屋 > Programming > sample > sendsend > sendto.cpp |
---|
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:
参照:
水無瀬の部屋 > sample > sendsend > sendto.cpp |
---|
このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/sendsend/sendto_cpp.shtml