Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/setupdirdlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9421 - (hide annotations) (download) (as text)
Sat Sep 18 15:46:46 2021 UTC (2 years, 6 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/setupdirdlg.cpp
File MIME type: text/x-c++src
File size: 16327 byte(s)
VirtualStoreのパス生成時 _SHGetKnownFolderPath() を使用するよう修正

- 修正前は SHGetSpecialFolderLocation() を使用していた
1 zmatsuo 9339 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3     * (C) 2004- TeraTerm Project
4     * All rights reserved.
5     *
6     * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9     *
10     * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17     *
18     * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28     */
29    
30     #include "teraterm.h"
31     #include "tttypes.h"
32     #include "tttypes_key.h"
33    
34     #include "ttcommon.h"
35     #include "ttdialog.h"
36     #include "commlib.h"
37     #include "ttlib.h"
38     #include "dlglib.h"
39    
40     #include <stdio.h>
41     #define _CRTDBG_MAP_ALLOC
42     #include <stdlib.h>
43     #include <crtdbg.h>
44     #include <string.h>
45    
46     #include <shlobj.h>
47     #include <windows.h>
48     #include <wchar.h>
49     #include <htmlhelp.h>
50    
51     #include "tt_res.h"
52     #include "vtwin.h"
53     #include "compat_win.h"
54     #include "codeconv.h"
55     #include "asprintf.h"
56 zmatsuo 9412 #include "helpid.h"
57 zmatsuo 9339
58     #include "setupdirdlg.h"
59    
60 zmatsuo 9340 // Virtual Store���L���������������������������B
61 zmatsuo 9339 //
62 zmatsuo 9340 // [Windows 95-XP]
63     // return FALSE (always)
64     //
65     // [Windows Vista-10]
66     // return TRUE: Virtual Store Enabled
67     // FALSE: Virtual Store Disabled or Unknown
68     //
69     static BOOL GetVirtualStoreEnvironment(void)
70     {
71     #if _MSC_VER == 1400 // VSC2005(VC8.0)
72     typedef struct _TOKEN_ELEVATION {
73     DWORD TokenIsElevated;
74     } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
75     int TokenElevation = 20;
76     #endif
77     BOOL ret = FALSE;
78     int flag = 0;
79     HANDLE hToken;
80     DWORD dwLength;
81     TOKEN_ELEVATION tokenElevation;
82     LONG lRet;
83     HKEY hKey;
84     char lpData[256];
85     DWORD dwDataSize;
86     DWORD dwType;
87     BYTE bValue;
88    
89     // Windows Vista���O�����������B
90     if (!IsWindowsVistaOrLater())
91     goto error;
92    
93     // UAC���L�����������B
94     // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System��EnableLUA(DWORD�l)��0�������������f��������(0��UAC�����A1��UAC�L��)�B
95     flag = 0;
96     lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
97     TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),
98     NULL, KEY_QUERY_VALUE, &hKey
99     );
100     if (lRet == ERROR_SUCCESS) {
101     dwDataSize = sizeof(lpData) / sizeof(lpData[0]);
102     lRet = RegQueryValueEx(
103     hKey,
104     TEXT("EnableLUA"),
105     0,
106     &dwType,
107     (LPBYTE)lpData,
108     &dwDataSize);
109     if (lRet == ERROR_SUCCESS) {
110     bValue = ((LPBYTE)lpData)[0];
111     if (bValue == 1)
112     // UAC���L���������AVirtual Store�������B
113     flag = 1;
114     }
115     RegCloseKey(hKey);
116     }
117     if (flag == 0)
118     goto error;
119    
120     // UAC���L�����A�v���Z�X�����������������i�����������B
121     flag = 0;
122     if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &hToken)) {
123     if (GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)TokenElevation, &tokenElevation, sizeof(TOKEN_ELEVATION), &dwLength)) {
124     // (0�����i�����������A��0�����i��������)�B
125     if (tokenElevation.TokenIsElevated == 0) {
126     // �����������������������������AVirtual Store�������B
127     flag = 1;
128     }
129     }
130     CloseHandle(hToken);
131     }
132     if (flag == 0)
133     goto error;
134    
135     ret = TRUE;
136     return (ret);
137    
138     error:
139     return (ret);
140     }
141    
142     //
143 zmatsuo 9339 // �w�������A�v���P�[�V�������t�@�C�����J���B
144     //
145     // return TRUE: success
146     // FALSE: failure
147     //
148 zmatsuo 9340 static BOOL openFileWithApplication(const wchar_t *filename, const char *editor, const char *UILanguageFile)
149 zmatsuo 9339 {
150 zmatsuo 9340 wchar_t *commandW = NULL;
151 zmatsuo 9339 BOOL ret = FALSE;
152    
153 zmatsuo 9340 if (GetFileAttributesW(filename) == INVALID_FILE_ATTRIBUTES) {
154     // �t�@�C��������������
155     DWORD no = GetLastError();
156     static const TTMessageBoxInfoW info = {
157     "Tera Term",
158     "MSG_ERROR", L"ERROR",
159 zmatsuo 9342 "DLG_SETUPDIR_NOFILE_ERROR", L"File does not exist.(%d)",
160     MB_OK | MB_ICONWARNING
161     };
162     TTMessageBoxA(NULL, &info, UILanguageFile, no);
163 zmatsuo 9339
164     goto error;
165     }
166    
167 zmatsuo 9340 aswprintf(&commandW, L"%hs \"%s\"", editor, filename);
168 zmatsuo 9339
169 zmatsuo 9340 STARTUPINFOW si;
170     PROCESS_INFORMATION pi;
171 zmatsuo 9339 memset(&si, 0, sizeof(si));
172 zmatsuo 9340 GetStartupInfoW(&si);
173 zmatsuo 9339 memset(&pi, 0, sizeof(pi));
174    
175 zmatsuo 9340 if (CreateProcessW(NULL, commandW, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) == 0) {
176     // �N�����s
177 zmatsuo 9339 DWORD no = GetLastError();
178 zmatsuo 9340 static const TTMessageBoxInfoW info = {
179     "Tera Term",
180     "MSG_ERROR", L"ERROR",
181 zmatsuo 9342 "DLG_SETUPDIR_OPENFILE_ERROR", L"Cannot open file.(%d)",
182     MB_OK | MB_ICONWARNING
183     };
184     TTMessageBoxA(NULL, &info, UILanguageFile, no);
185 zmatsuo 9340
186 zmatsuo 9339 goto error;
187 zmatsuo 9340 }
188     else {
189 zmatsuo 9339 CloseHandle(pi.hThread);
190     CloseHandle(pi.hProcess);
191     }
192    
193     ret = TRUE;
194    
195     error:;
196 zmatsuo 9340 free(commandW);
197    
198 zmatsuo 9339 return (ret);
199     }
200    
201     //
202     // �G�N�X�v���[�����p�X���J���B
203     //
204     // return TRUE: success
205     // FALSE: failure
206     //
207 zmatsuo 9340 static BOOL openDirectoryWithExplorer(const wchar_t *path, const char *UILanguageFile)
208 zmatsuo 9339 {
209 zmatsuo 9340 BOOL ret;
210 zmatsuo 9339
211 zmatsuo 9340 const DWORD attr = GetFileAttributesW(path);
212     if (attr == INVALID_FILE_ATTRIBUTES) {
213     // �t�@�C��������������
214     DWORD no = GetLastError();
215     static const TTMessageBoxInfoW info = {
216     "Tera Term",
217     "MSG_ERROR", L"ERROR",
218 zmatsuo 9342 "DLG_SETUPDIR_NOFILE_ERROR", L"File does not exist.(%d)",
219     MB_OK | MB_ICONWARNING
220     };
221     TTMessageBoxA(NULL, &info, UILanguageFile, no);
222 zmatsuo 9340 ret = FALSE;
223     } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
224     // �t�H���_���J��
225     INT_PTR h = (INT_PTR)ShellExecuteW(NULL, L"open", L"explorer.exe", path, NULL, SW_NORMAL);
226     ret = h > 32 ? TRUE : FALSE;
227     } else {
228     // �t�H���_���J�� + �t�@�C���I��
229     wchar_t *param;
230     aswprintf(&param, L"/select,%s", path);
231     INT_PTR h = (INT_PTR)ShellExecuteW(NULL, L"open", L"explorer.exe", param, NULL, SW_NORMAL);
232     free(param);
233     ret = h > 32 ? TRUE : FALSE;
234 zmatsuo 9339 }
235 zmatsuo 9340 return ret;
236 zmatsuo 9339 }
237    
238 zmatsuo 9340 /**
239     * �t���p�X�t�@�C������ Virtual Store�p�X�����������B
240     * @param[in] filename �����O���t�@�C����
241     * @param[out] vstore_filename Virtual Store���t�@�C����
242     * @retval TRUE ��������
243     * FALSE ��������������(Virtual Store������������������)
244     */
245     static BOOL convertVirtualStoreW(const wchar_t *filename, wchar_t **vstore_filename)
246 zmatsuo 9339 {
247 zmatsuo 9340 wchar_t *path = ExtractDirNameW(filename);
248     wchar_t *file = ExtractFileNameW(filename);
249    
250     // �s�v���h���C�u���^�[�����������B
251     // �h���C�u���^�[���������������������_�������B(1��������?)
252     wchar_t *path_nodrive = wcsstr(path, L":\\");
253     if (path_nodrive == NULL) {
254     // �t���p�X��������, VS���l������������ok
255     free(path);
256     free(file);
257     return FALSE;
258 zmatsuo 9339 }
259 zmatsuo 9340 path_nodrive++;
260 zmatsuo 9339
261     BOOL ret = FALSE;
262 zmatsuo 9340 static const wchar_t* virstore_env[] = {
263     L"ProgramFiles",
264     L"ProgramData",
265     L"SystemRoot",
266 zmatsuo 9339 NULL
267     };
268 zmatsuo 9340 const wchar_t** p = virstore_env;
269 zmatsuo 9339
270 zmatsuo 9340 if (GetVirtualStoreEnvironment() == FALSE)
271 zmatsuo 9339 goto error;
272    
273     // Virtual Store�����������t�H���_���B
274     while (*p) {
275 zmatsuo 9340 const wchar_t *s = _wgetenv(*p);
276     if (s != NULL && wcsstr(path, s) != NULL) {
277 zmatsuo 9339 break;
278     }
279     p++;
280     }
281     if (*p == NULL)
282     goto error;
283    
284    
285     // Virtual Store�p�X�������B
286 zmatsuo 9421 wchar_t *local_appdata;
287     _SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &local_appdata);
288     wchar_t *vs_file;
289     aswprintf(&vs_file, L"%s\\VirtualStore%s", local_appdata, path_nodrive, file);
290     free(local_appdata);
291 zmatsuo 9339
292     // �������AVirtual Store���t�@�C�������������������������B
293 zmatsuo 9340 if (GetFileAttributesW(vs_file) == INVALID_FILE_ATTRIBUTES) {
294     free(vs_file);
295 zmatsuo 9339 goto error;
296     }
297    
298 zmatsuo 9340 *vstore_filename = vs_file;
299 zmatsuo 9339
300     ret = TRUE;
301 zmatsuo 9340 goto epilogue;
302 zmatsuo 9339
303     error:
304 zmatsuo 9340 *vstore_filename = NULL;
305     ret = FALSE;
306     epilogue:
307     free(path);
308     free(file);
309     return ret;
310 zmatsuo 9339 }
311    
312 zmatsuo 9340 static wchar_t *GetWindowTextAlloc(HWND hWnd)
313     {
314     size_t length = GetWindowTextLengthW(hWnd);
315     length++;
316     wchar_t *buf = (wchar_t *)malloc(sizeof(wchar_t) * length);
317     GetWindowTextW(hWnd, buf, (int)length);
318     return buf;
319     }
320    
321 zmatsuo 9339 static INT_PTR CALLBACK OnSetupDirectoryDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
322     {
323     static const DlgTextInfo TextInfos[] = {
324     { 0, "DLG_SETUPDIR_TITLE" },
325     { IDC_INI_SETUPDIR_GROUP, "DLG_SETUPDIR_INIFILE" },
326     { IDC_KEYCNF_SETUPDIR_GROUP, "DLG_SETUPDIR_KEYBOARDFILE" },
327     { IDC_CYGTERM_SETUPDIR_GROUP, "DLG_SETUPDIR_CYGTERMFILE" },
328     { IDC_SSH_SETUPDIR_GROUP, "DLG_SETUPDIR_KNOWNHOSTSFILE" },
329     };
330 zmatsuo 9340 TTTSet *pts = (TTTSet *)GetWindowLongPtr(hDlgWnd, DWLP_USER);
331     wchar_t *tmpbufW;
332 zmatsuo 9339 HWND hWnd;
333    
334     switch (msg) {
335 zmatsuo 9340 case WM_INITDIALOG: {
336     BOOL ret;
337     pts = (TTTSet *)lp;
338     SetWindowLongPtr(hDlgWnd, DWLP_USER, (LONG_PTR)pts);
339    
340 zmatsuo 9339 // I18N
341 zmatsuo 9359 SetDlgTextsW(hDlgWnd, TextInfos, _countof(TextInfos), pts->UILanguageFileW);
342 zmatsuo 9339
343     // �����t�@�C��(teraterm.ini)���p�X�����������B
344     /// (1)
345 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_INI_SETUPDIR_EDIT, pts->SetupFNameW);
346 zmatsuo 9339 /// (2) Virutal Store��������
347 zmatsuo 9340 wchar_t *vs;
348     ret = convertVirtualStoreW(pts->SetupFNameW, &vs);
349     hWnd = GetDlgItem(hDlgWnd, IDC_INI_SETUPDIR_STATIC_VSTORE);
350     EnableWindow(hWnd, ret);
351     hWnd = GetDlgItem(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE);
352     EnableWindow(hWnd, ret);
353 zmatsuo 9339 if (ret) {
354 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE, vs);
355     free(vs);
356 zmatsuo 9339 }
357     else {
358 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE, "");
359 zmatsuo 9339 }
360    
361     // �����t�@�C��(KEYBOARD.CNF)���p�X�����������B
362     /// (1)
363 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT, pts->KeyCnfFNW);
364 zmatsuo 9339 /// (2) Virutal Store��������
365 zmatsuo 9340 ret = convertVirtualStoreW(pts->KeyCnfFNW, &vs);
366     hWnd = GetDlgItem(hDlgWnd, IDC_KEYCNF_SETUPDIR_STATIC_VSTORE);
367     EnableWindow(hWnd, ret);
368     hWnd = GetDlgItem(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE);
369     EnableWindow(hWnd, ret);
370 zmatsuo 9339 if (ret) {
371 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE, vs);
372     free(vs);
373 zmatsuo 9339 }
374     else {
375 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE, "");
376 zmatsuo 9339 }
377    
378     // cygterm.cfg �� ttermpro.exe �z�������u�����B
379     /// (1)
380 zmatsuo 9340 aswprintf(&tmpbufW, L"%s\\cygterm.cfg", pts->HomeDirW);
381     SetDlgItemTextW(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT, tmpbufW);
382 zmatsuo 9339 /// (2) Virutal Store��������
383 zmatsuo 9340 ret = convertVirtualStoreW(tmpbufW, &vs);
384     free(tmpbufW);
385     hWnd = GetDlgItem(hDlgWnd, IDC_CYGTERM_SETUPDIR_STATIC_VSTORE);
386     EnableWindow(hWnd, ret);
387     hWnd = GetDlgItem(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE);
388     EnableWindow(hWnd, ret);
389 zmatsuo 9339 if (ret) {
390 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE, vs);
391     free(vs);
392 zmatsuo 9339 }
393     else {
394 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE, "");
395 zmatsuo 9339 }
396    
397     // ssh_known_hosts
398 zmatsuo 9340 {
399     typedef int (CALLBACK *PSSH_read_known_hosts_file)(char *, int);
400     HMODULE h = NULL;
401     PSSH_read_known_hosts_file func = NULL;
402 zmatsuo 9339 if (((h = GetModuleHandle("ttxssh.dll")) != NULL)) {
403     func = (PSSH_read_known_hosts_file)GetProcAddress(h, "TTXReadKnownHostsFile");
404     if (func) {
405 zmatsuo 9340 char temp[MAX_PATH];
406 zmatsuo 9339 int ret = func(temp, sizeof(temp));
407     if (ret) {
408     char *s = strstr(temp, ":\\");
409    
410     if (s) { // full path
411 zmatsuo 9340 tmpbufW = ToWcharA(temp);
412 zmatsuo 9339 }
413     else { // relative path
414 zmatsuo 9340 aswprintf(&tmpbufW, L"%s\\%hs", pts->HomeDirW, temp);
415 zmatsuo 9339 }
416    
417 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_SSH_SETUPDIR_EDIT, tmpbufW);
418 zmatsuo 9339
419     /// (2) Virutal Store��������
420 zmatsuo 9340 ret = convertVirtualStoreW(tmpbufW, &vs);
421     free(tmpbufW);
422     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_STATIC_VSTORE);
423     EnableWindow(hWnd, ret);
424     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE);
425     EnableWindow(hWnd, ret);
426 zmatsuo 9339 if (ret) {
427 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, vs);
428     free(vs);
429 zmatsuo 9339 }
430     else {
431 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, "");
432 zmatsuo 9339 }
433    
434     }
435     }
436     }
437     else {
438     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT);
439     EnableWindow(hWnd, FALSE);
440 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT, "");
441 zmatsuo 9339 hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_BUTTON);
442     EnableWindow(hWnd, FALSE);
443     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_BUTTON_FILE);
444     EnableWindow(hWnd, FALSE);
445     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_STATIC_VSTORE);
446     EnableWindow(hWnd, FALSE);
447     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE);
448     EnableWindow(hWnd, FALSE);
449 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, "");
450 zmatsuo 9339 }
451     }
452    
453 zmatsuo 9341 CenterWindow(hDlgWnd, GetParent(hDlgWnd));
454    
455 zmatsuo 9339 return TRUE;
456 zmatsuo 9340 }
457 zmatsuo 9339
458 zmatsuo 9340 case WM_COMMAND: {
459     BOOL button_pressed = FALSE;
460     BOOL open_dir = FALSE;
461     int edit;
462     int edit_vstore;
463 zmatsuo 9339 switch (LOWORD(wp)) {
464     case IDC_INI_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
465 zmatsuo 9340 edit = IDC_INI_SETUPDIR_EDIT;
466     edit_vstore = IDC_INI_SETUPDIR_EDIT_VSTORE;
467 zmatsuo 9339 open_dir = TRUE;
468 zmatsuo 9340 button_pressed = TRUE;
469 zmatsuo 9339 break;
470 zmatsuo 9340
471 zmatsuo 9339 case IDC_INI_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
472 zmatsuo 9340 edit = IDC_INI_SETUPDIR_EDIT;
473     edit_vstore = IDC_INI_SETUPDIR_EDIT_VSTORE;
474 zmatsuo 9339 open_dir = FALSE;
475 zmatsuo 9340 button_pressed = TRUE;
476 zmatsuo 9339 break;
477    
478     case IDC_KEYCNF_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
479 zmatsuo 9340 edit = IDC_KEYCNF_SETUPDIR_EDIT;
480     edit_vstore = IDC_KEYCNF_SETUPDIR_EDIT_VSTORE;
481 zmatsuo 9339 open_dir = TRUE;
482 zmatsuo 9340 button_pressed = TRUE;
483 zmatsuo 9339 break;
484 zmatsuo 9340
485 zmatsuo 9339 case IDC_KEYCNF_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
486 zmatsuo 9340 edit = IDC_KEYCNF_SETUPDIR_EDIT;
487     edit_vstore = IDC_KEYCNF_SETUPDIR_EDIT_VSTORE;
488 zmatsuo 9339 open_dir = FALSE;
489 zmatsuo 9340 button_pressed = TRUE;
490 zmatsuo 9339 break;
491    
492     case IDC_CYGTERM_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
493 zmatsuo 9340 edit = IDC_CYGTERM_SETUPDIR_EDIT;
494     edit_vstore = IDC_CYGTERM_SETUPDIR_EDIT_VSTORE;
495 zmatsuo 9339 open_dir = TRUE;
496 zmatsuo 9340 button_pressed = TRUE;
497 zmatsuo 9339 break;
498 zmatsuo 9340
499 zmatsuo 9339 case IDC_CYGTERM_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
500 zmatsuo 9340 edit = IDC_CYGTERM_SETUPDIR_EDIT;
501     edit_vstore = IDC_CYGTERM_SETUPDIR_EDIT_VSTORE;
502 zmatsuo 9339 open_dir = FALSE;
503 zmatsuo 9340 button_pressed = TRUE;
504 zmatsuo 9339 break;
505    
506     case IDC_SSH_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
507 zmatsuo 9340 edit = IDC_SSH_SETUPDIR_EDIT;
508     edit_vstore = IDC_SSH_SETUPDIR_EDIT_VSTORE;
509 zmatsuo 9339 open_dir = TRUE;
510 zmatsuo 9340 button_pressed = TRUE;
511 zmatsuo 9339 break;
512 zmatsuo 9340
513 zmatsuo 9339 case IDC_SSH_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
514 zmatsuo 9340 edit = IDC_SSH_SETUPDIR_EDIT;
515     edit_vstore = IDC_SSH_SETUPDIR_EDIT_VSTORE;
516 zmatsuo 9339 open_dir = FALSE;
517 zmatsuo 9340 button_pressed = TRUE;
518 zmatsuo 9339 break;
519    
520 zmatsuo 9412 case IDHELP:
521     OpenHelp(HH_HELP_CONTEXT, HlpMenuSetupDir, pts->UILanguageFile);
522     break;
523    
524     case IDOK:
525     TTEndDialog(hDlgWnd, IDOK);
526     return TRUE;
527     break;
528    
529 zmatsuo 9339 case IDCANCEL:
530     TTEndDialog(hDlgWnd, IDCANCEL);
531     return TRUE;
532     break;
533    
534     default:
535     return FALSE;
536     }
537    
538     if (button_pressed) {
539 zmatsuo 9340 wchar_t *filename_p;
540     if (!IsWindowEnabled(GetDlgItem(hDlgWnd, edit_vstore))) {
541     filename_p = GetWindowTextAlloc(GetDlgItem(hDlgWnd, edit));
542     } else {
543     filename_p = GetWindowTextAlloc(GetDlgItem(hDlgWnd, edit_vstore));
544     }
545 zmatsuo 9339
546 zmatsuo 9340 const char *UILanguageFile = pts->UILanguageFile;
547     if (open_dir) {
548     #if 0
549     // �t�H���_���J��
550     wchar_t *path_p = ExtractDirNameW(filename_p);
551     openDirectoryWithExplorer(path_p, UILanguageFile);
552     free(path_p);
553     #else
554     // �t�H���_���J�����A�t�@�C�����I������
555     openDirectoryWithExplorer(filename_p, UILanguageFile);
556     #endif
557     }
558     else {
559     char *editor = pts->ViewlogEditor;
560     openFileWithApplication(filename_p, editor, UILanguageFile);
561     }
562 zmatsuo 9339
563 zmatsuo 9340 free(filename_p);
564 zmatsuo 9339 return TRUE;
565     }
566     return FALSE;
567 zmatsuo 9340 }
568 zmatsuo 9339 case WM_CLOSE:
569     TTEndDialog(hDlgWnd, 0);
570     return TRUE;
571    
572     default:
573     return FALSE;
574     }
575     return TRUE;
576     }
577    
578 zmatsuo 9340 void SetupDirectoryDialog(HINSTANCE hInst, HWND hWnd, TTTSet *pts)
579 zmatsuo 9339 {
580 zmatsuo 9340 TTDialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SETUP_DIR_DIALOG),
581     hWnd, OnSetupDirectoryDlgProc, (LPARAM)pts);
582 zmatsuo 9339 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26