回答編集履歴

1

CommandLineToArgvWについて追記

2017/05/05 15:31

投稿

退会済みユーザー
test CHANGED
@@ -27,3 +27,91 @@
27
27
  WinMain → wWinMain
28
28
 
29
29
  CreateFile → CreateFileW
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ 追記:
38
+
39
+
40
+
41
+ CommandLineToArgvWの使い方を知りたいみたいだったので追記。
42
+
43
+ Unicode対応だとわかりやすいようにWが付いた方のAPIを指定してます。
44
+
45
+
46
+
47
+ ```C++
48
+
49
+ #include <windows.h>
50
+
51
+
52
+
53
+ int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR lpCmdLine, int)
54
+
55
+ {
56
+
57
+ int Argc; // コマンドライン引数の個数
58
+
59
+ LPWSTR *Argv; // コマンドライン引数のリスト
60
+
61
+ HANDLE hFile = nullptr;
62
+
63
+
64
+
65
+ // GetCommandLine()を使用した場合は、Argv[0]に実行時のパスが入り、
66
+
67
+ // Argv[1]以降にコマンドライン引数が入る
68
+
69
+ // lpCmdLineを指定した場合は、Argv[0]に1番目のコマンドライン引数が入る
70
+
71
+ Argv = CommandLineToArgvW(GetCommandLineW(), &Argc);
72
+
73
+ // Argv = CommandLineToArgvW(lpCmdLine, &Argc);
74
+
75
+
76
+
77
+ hFile = CreateFileW(Argv[1], GENERIC_READ, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
78
+
79
+ if (hFile == INVALID_HANDLE_VALUE) {
80
+
81
+ MessageBoxW(nullptr, L"ファイルのオープンに失敗しました", L"エラー", MB_OK);
82
+
83
+ return 1;
84
+
85
+ }
86
+
87
+
88
+
89
+ CloseHandle(hFile);
90
+
91
+
92
+
93
+ return 0;
94
+
95
+ }
96
+
97
+ ```
98
+
99
+
100
+
101
+ これで`>test.exe text1.txt text2.txt text3.txt`のような感じで、スペースで区切って複数のオプションを指定した場合、
102
+
103
+
104
+
105
+ Argv[0]にtest.exe
106
+
107
+ Argv[1]にtext1.txt
108
+
109
+ Argv[2]にtext2.txt ... というようにコマンドライン引数が格納され、
110
+
111
+
112
+
113
+ CreateFileにArgv[1]を指定しているので、text1.txtが作成され他は無視されるというわけです。
114
+
115
+
116
+
117
+