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 9340 - (hide annotations) (download) (as text)
Sun Aug 1 05:37:03 2021 UTC (2 years, 8 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/setupdirdlg.cpp
File MIME type: text/x-c++src
File size: 16165 byte(s)
setup directory dialog をUnicode化

- ssh_known_hosts のパスは Unicodeに変換して表示
- cv.VirtualStoreEnabled を削除
- GetVirtualStoreEnvironment() を移動
  - vtwin.cpp から setupdirdlg.cpp へ
  - VirtualStore を別の個所でつかっていないため
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    
57     #include "setupdirdlg.h"
58    
59 zmatsuo 9340 // Virtual Store���L���������������������������B
60 zmatsuo 9339 //
61 zmatsuo 9340 // [Windows 95-XP]
62     // return FALSE (always)
63     //
64     // [Windows Vista-10]
65     // return TRUE: Virtual Store Enabled
66     // FALSE: Virtual Store Disabled or Unknown
67     //
68     static BOOL GetVirtualStoreEnvironment(void)
69     {
70     #if _MSC_VER == 1400 // VSC2005(VC8.0)
71     typedef struct _TOKEN_ELEVATION {
72     DWORD TokenIsElevated;
73     } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
74     int TokenElevation = 20;
75     #endif
76     BOOL ret = FALSE;
77     int flag = 0;
78     HANDLE hToken;
79     DWORD dwLength;
80     TOKEN_ELEVATION tokenElevation;
81     LONG lRet;
82     HKEY hKey;
83     char lpData[256];
84     DWORD dwDataSize;
85     DWORD dwType;
86     BYTE bValue;
87    
88     // Windows Vista���O�����������B
89     if (!IsWindowsVistaOrLater())
90     goto error;
91    
92     // UAC���L�����������B
93     // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System��EnableLUA(DWORD�l)��0�������������f��������(0��UAC�����A1��UAC�L��)�B
94     flag = 0;
95     lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
96     TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),
97     NULL, KEY_QUERY_VALUE, &hKey
98     );
99     if (lRet == ERROR_SUCCESS) {
100     dwDataSize = sizeof(lpData) / sizeof(lpData[0]);
101     lRet = RegQueryValueEx(
102     hKey,
103     TEXT("EnableLUA"),
104     0,
105     &dwType,
106     (LPBYTE)lpData,
107     &dwDataSize);
108     if (lRet == ERROR_SUCCESS) {
109     bValue = ((LPBYTE)lpData)[0];
110     if (bValue == 1)
111     // UAC���L���������AVirtual Store�������B
112     flag = 1;
113     }
114     RegCloseKey(hKey);
115     }
116     if (flag == 0)
117     goto error;
118    
119     // UAC���L�����A�v���Z�X�����������������i�����������B
120     flag = 0;
121     if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &hToken)) {
122     if (GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)TokenElevation, &tokenElevation, sizeof(TOKEN_ELEVATION), &dwLength)) {
123     // (0�����i�����������A��0�����i��������)�B
124     if (tokenElevation.TokenIsElevated == 0) {
125     // �����������������������������AVirtual Store�������B
126     flag = 1;
127     }
128     }
129     CloseHandle(hToken);
130     }
131     if (flag == 0)
132     goto error;
133    
134     ret = TRUE;
135     return (ret);
136    
137     error:
138     return (ret);
139     }
140    
141     //
142 zmatsuo 9339 // �w�������A�v���P�[�V�������t�@�C�����J���B
143     //
144     // return TRUE: success
145     // FALSE: failure
146     //
147 zmatsuo 9340 static BOOL openFileWithApplication(const wchar_t *filename, const char *editor, const char *UILanguageFile)
148 zmatsuo 9339 {
149 zmatsuo 9340 wchar_t *commandW = NULL;
150 zmatsuo 9339 BOOL ret = FALSE;
151    
152 zmatsuo 9340 if (GetFileAttributesW(filename) == INVALID_FILE_ATTRIBUTES) {
153     // �t�@�C��������������
154     DWORD no = GetLastError();
155     static const TTMessageBoxInfoW info = {
156     "Tera Term",
157     "MSG_ERROR", L"ERROR",
158     "DLG_SETUPDIR_NOFILE_ERROR", L"File does not exist.(%d)" };
159     TTMessageBoxW(NULL, &info, MB_OK | MB_ICONWARNING, UILanguageFile, no);
160 zmatsuo 9339
161     goto error;
162     }
163    
164 zmatsuo 9340 aswprintf(&commandW, L"%hs \"%s\"", editor, filename);
165 zmatsuo 9339
166 zmatsuo 9340 STARTUPINFOW si;
167     PROCESS_INFORMATION pi;
168 zmatsuo 9339 memset(&si, 0, sizeof(si));
169 zmatsuo 9340 GetStartupInfoW(&si);
170 zmatsuo 9339 memset(&pi, 0, sizeof(pi));
171    
172 zmatsuo 9340 if (CreateProcessW(NULL, commandW, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) == 0) {
173     // �N�����s
174 zmatsuo 9339 DWORD no = GetLastError();
175 zmatsuo 9340 static const TTMessageBoxInfoW info = {
176     "Tera Term",
177     "MSG_ERROR", L"ERROR",
178     "DLG_SETUPDIR_OPENFILE_ERROR", L"Cannot open file.(%d)" };
179     TTMessageBoxW(NULL, &info, MB_OK | MB_ICONWARNING, UILanguageFile, no);
180    
181 zmatsuo 9339 goto error;
182 zmatsuo 9340 }
183     else {
184 zmatsuo 9339 CloseHandle(pi.hThread);
185     CloseHandle(pi.hProcess);
186     }
187    
188     ret = TRUE;
189    
190     error:;
191 zmatsuo 9340 free(commandW);
192    
193 zmatsuo 9339 return (ret);
194     }
195    
196     //
197     // �G�N�X�v���[�����p�X���J���B
198     //
199     // return TRUE: success
200     // FALSE: failure
201     //
202 zmatsuo 9340 static BOOL openDirectoryWithExplorer(const wchar_t *path, const char *UILanguageFile)
203 zmatsuo 9339 {
204 zmatsuo 9340 BOOL ret;
205 zmatsuo 9339
206 zmatsuo 9340 const DWORD attr = GetFileAttributesW(path);
207     if (attr == INVALID_FILE_ATTRIBUTES) {
208     // �t�@�C��������������
209     DWORD no = GetLastError();
210     static const TTMessageBoxInfoW info = {
211     "Tera Term",
212     "MSG_ERROR", L"ERROR",
213     "DLG_SETUPDIR_NOFILE_ERROR", L"File does not exist.(%d)" };
214     TTMessageBoxW(NULL, &info, MB_OK | MB_ICONWARNING, UILanguageFile, no);
215     ret = FALSE;
216     } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
217     // �t�H���_���J��
218     INT_PTR h = (INT_PTR)ShellExecuteW(NULL, L"open", L"explorer.exe", path, NULL, SW_NORMAL);
219     ret = h > 32 ? TRUE : FALSE;
220     } else {
221     // �t�H���_���J�� + �t�@�C���I��
222     wchar_t *param;
223     aswprintf(&param, L"/select,%s", path);
224     INT_PTR h = (INT_PTR)ShellExecuteW(NULL, L"open", L"explorer.exe", param, NULL, SW_NORMAL);
225     free(param);
226     ret = h > 32 ? TRUE : FALSE;
227 zmatsuo 9339 }
228 zmatsuo 9340 return ret;
229 zmatsuo 9339 }
230    
231 zmatsuo 9340 /**
232     * �t���p�X�t�@�C������ Virtual Store�p�X�����������B
233     * @param[in] filename �����O���t�@�C����
234     * @param[out] vstore_filename Virtual Store���t�@�C����
235     * @retval TRUE ��������
236     * FALSE ��������������(Virtual Store������������������)
237     */
238     static BOOL convertVirtualStoreW(const wchar_t *filename, wchar_t **vstore_filename)
239 zmatsuo 9339 {
240 zmatsuo 9340 wchar_t *path = ExtractDirNameW(filename);
241     wchar_t *file = ExtractFileNameW(filename);
242    
243     // �s�v���h���C�u���^�[�����������B
244     // �h���C�u���^�[���������������������_�������B(1��������?)
245     wchar_t *path_nodrive = wcsstr(path, L":\\");
246     if (path_nodrive == NULL) {
247     // �t���p�X��������, VS���l������������ok
248     free(path);
249     free(file);
250     return FALSE;
251 zmatsuo 9339 }
252 zmatsuo 9340 path_nodrive++;
253 zmatsuo 9339
254     BOOL ret = FALSE;
255 zmatsuo 9340 static const wchar_t* virstore_env[] = {
256     L"ProgramFiles",
257     L"ProgramData",
258     L"SystemRoot",
259 zmatsuo 9339 NULL
260     };
261     LPITEMIDLIST pidl;
262     int CSIDL;
263 zmatsuo 9340 wchar_t shPath[1024];
264     wchar_t *vs_file;
265     const wchar_t** p = virstore_env;
266 zmatsuo 9339
267 zmatsuo 9340 if (GetVirtualStoreEnvironment() == FALSE)
268 zmatsuo 9339 goto error;
269    
270     // Virtual Store�����������t�H���_���B
271     while (*p) {
272 zmatsuo 9340 const wchar_t *s = _wgetenv(*p);
273     if (s != NULL && wcsstr(path, s) != NULL) {
274 zmatsuo 9339 break;
275     }
276     p++;
277     }
278     if (*p == NULL)
279     goto error;
280    
281     CSIDL = CSIDL_LOCAL_APPDATA;
282     if (SHGetSpecialFolderLocation(NULL, CSIDL, &pidl) != S_OK) {
283     goto error;
284     }
285 zmatsuo 9340 SHGetPathFromIDListW(pidl, shPath);
286 zmatsuo 9339 CoTaskMemFree(pidl);
287    
288     // Virtual Store�p�X�������B
289 zmatsuo 9340 aswprintf(&vs_file, L"%s\\VirtualStore%s", shPath, path_nodrive, file);
290 zmatsuo 9339
291     // �������AVirtual Store���t�@�C�������������������������B
292 zmatsuo 9340 if (GetFileAttributesW(vs_file) == INVALID_FILE_ATTRIBUTES) {
293     free(vs_file);
294 zmatsuo 9339 goto error;
295     }
296    
297 zmatsuo 9340 *vstore_filename = vs_file;
298 zmatsuo 9339
299     ret = TRUE;
300 zmatsuo 9340 goto epilogue;
301 zmatsuo 9339
302     error:
303 zmatsuo 9340 *vstore_filename = NULL;
304     ret = FALSE;
305     epilogue:
306     free(path);
307     free(file);
308     return ret;
309 zmatsuo 9339 }
310    
311 zmatsuo 9340 static wchar_t *GetWindowTextAlloc(HWND hWnd)
312     {
313     size_t length = GetWindowTextLengthW(hWnd);
314     length++;
315     wchar_t *buf = (wchar_t *)malloc(sizeof(wchar_t) * length);
316     GetWindowTextW(hWnd, buf, (int)length);
317     return buf;
318     }
319    
320 zmatsuo 9339 static INT_PTR CALLBACK OnSetupDirectoryDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
321     {
322     static const DlgTextInfo TextInfos[] = {
323     { 0, "DLG_SETUPDIR_TITLE" },
324     { IDC_INI_SETUPDIR_GROUP, "DLG_SETUPDIR_INIFILE" },
325     { IDC_KEYCNF_SETUPDIR_GROUP, "DLG_SETUPDIR_KEYBOARDFILE" },
326     { IDC_CYGTERM_SETUPDIR_GROUP, "DLG_SETUPDIR_CYGTERMFILE" },
327     { IDC_SSH_SETUPDIR_GROUP, "DLG_SETUPDIR_KNOWNHOSTSFILE" },
328     };
329 zmatsuo 9340 TTTSet *pts = (TTTSet *)GetWindowLongPtr(hDlgWnd, DWLP_USER);
330     wchar_t *tmpbufW;
331 zmatsuo 9339 HWND hWnd;
332    
333     switch (msg) {
334 zmatsuo 9340 case WM_INITDIALOG: {
335     BOOL ret;
336     pts = (TTTSet *)lp;
337     SetWindowLongPtr(hDlgWnd, DWLP_USER, (LONG_PTR)pts);
338    
339 zmatsuo 9339 // I18N
340 zmatsuo 9340 SetDlgTexts(hDlgWnd, TextInfos, _countof(TextInfos), pts->UILanguageFile);
341 zmatsuo 9339
342     // �����t�@�C��(teraterm.ini)���p�X�����������B
343     /// (1)
344 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_INI_SETUPDIR_EDIT, pts->SetupFNameW);
345 zmatsuo 9339 /// (2) Virutal Store��������
346 zmatsuo 9340 wchar_t *vs;
347     ret = convertVirtualStoreW(pts->SetupFNameW, &vs);
348     hWnd = GetDlgItem(hDlgWnd, IDC_INI_SETUPDIR_STATIC_VSTORE);
349     EnableWindow(hWnd, ret);
350     hWnd = GetDlgItem(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE);
351     EnableWindow(hWnd, ret);
352 zmatsuo 9339 if (ret) {
353 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE, vs);
354     free(vs);
355 zmatsuo 9339 }
356     else {
357 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_INI_SETUPDIR_EDIT_VSTORE, "");
358 zmatsuo 9339 }
359    
360     // �����t�@�C��(KEYBOARD.CNF)���p�X�����������B
361     /// (1)
362 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT, pts->KeyCnfFNW);
363 zmatsuo 9339 /// (2) Virutal Store��������
364 zmatsuo 9340 ret = convertVirtualStoreW(pts->KeyCnfFNW, &vs);
365     hWnd = GetDlgItem(hDlgWnd, IDC_KEYCNF_SETUPDIR_STATIC_VSTORE);
366     EnableWindow(hWnd, ret);
367     hWnd = GetDlgItem(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE);
368     EnableWindow(hWnd, ret);
369 zmatsuo 9339 if (ret) {
370 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE, vs);
371     free(vs);
372 zmatsuo 9339 }
373     else {
374 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_KEYCNF_SETUPDIR_EDIT_VSTORE, "");
375 zmatsuo 9339 }
376    
377     // cygterm.cfg �� ttermpro.exe �z�������u�����B
378     /// (1)
379 zmatsuo 9340 aswprintf(&tmpbufW, L"%s\\cygterm.cfg", pts->HomeDirW);
380     SetDlgItemTextW(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT, tmpbufW);
381 zmatsuo 9339 /// (2) Virutal Store��������
382 zmatsuo 9340 ret = convertVirtualStoreW(tmpbufW, &vs);
383     free(tmpbufW);
384     hWnd = GetDlgItem(hDlgWnd, IDC_CYGTERM_SETUPDIR_STATIC_VSTORE);
385     EnableWindow(hWnd, ret);
386     hWnd = GetDlgItem(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE);
387     EnableWindow(hWnd, ret);
388 zmatsuo 9339 if (ret) {
389 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE, vs);
390     free(vs);
391 zmatsuo 9339 }
392     else {
393 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_CYGTERM_SETUPDIR_EDIT_VSTORE, "");
394 zmatsuo 9339 }
395    
396     // ssh_known_hosts
397 zmatsuo 9340 {
398     typedef int (CALLBACK *PSSH_read_known_hosts_file)(char *, int);
399     HMODULE h = NULL;
400     PSSH_read_known_hosts_file func = NULL;
401 zmatsuo 9339 if (((h = GetModuleHandle("ttxssh.dll")) != NULL)) {
402     func = (PSSH_read_known_hosts_file)GetProcAddress(h, "TTXReadKnownHostsFile");
403     if (func) {
404 zmatsuo 9340 char temp[MAX_PATH];
405 zmatsuo 9339 int ret = func(temp, sizeof(temp));
406     if (ret) {
407     char *s = strstr(temp, ":\\");
408    
409     if (s) { // full path
410 zmatsuo 9340 tmpbufW = ToWcharA(temp);
411 zmatsuo 9339 }
412     else { // relative path
413 zmatsuo 9340 aswprintf(&tmpbufW, L"%s\\%hs", pts->HomeDirW, temp);
414 zmatsuo 9339 }
415    
416 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_SSH_SETUPDIR_EDIT, tmpbufW);
417 zmatsuo 9339
418     /// (2) Virutal Store��������
419 zmatsuo 9340 ret = convertVirtualStoreW(tmpbufW, &vs);
420     free(tmpbufW);
421     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_STATIC_VSTORE);
422     EnableWindow(hWnd, ret);
423     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE);
424     EnableWindow(hWnd, ret);
425 zmatsuo 9339 if (ret) {
426 zmatsuo 9340 SetDlgItemTextW(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, vs);
427     free(vs);
428 zmatsuo 9339 }
429     else {
430 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, "");
431 zmatsuo 9339 }
432    
433     }
434     }
435     }
436     else {
437     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT);
438     EnableWindow(hWnd, FALSE);
439 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT, "");
440 zmatsuo 9339 hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_BUTTON);
441     EnableWindow(hWnd, FALSE);
442     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_BUTTON_FILE);
443     EnableWindow(hWnd, FALSE);
444     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_STATIC_VSTORE);
445     EnableWindow(hWnd, FALSE);
446     hWnd = GetDlgItem(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE);
447     EnableWindow(hWnd, FALSE);
448 zmatsuo 9340 SetDlgItemTextA(hDlgWnd, IDC_SSH_SETUPDIR_EDIT_VSTORE, "");
449 zmatsuo 9339 }
450     }
451    
452     return TRUE;
453 zmatsuo 9340 }
454 zmatsuo 9339
455 zmatsuo 9340 case WM_COMMAND: {
456     BOOL button_pressed = FALSE;
457     BOOL open_dir = FALSE;
458     int edit;
459     int edit_vstore;
460 zmatsuo 9339 switch (LOWORD(wp)) {
461     case IDC_INI_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
462 zmatsuo 9340 edit = IDC_INI_SETUPDIR_EDIT;
463     edit_vstore = IDC_INI_SETUPDIR_EDIT_VSTORE;
464 zmatsuo 9339 open_dir = TRUE;
465 zmatsuo 9340 button_pressed = TRUE;
466 zmatsuo 9339 break;
467 zmatsuo 9340
468 zmatsuo 9339 case IDC_INI_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
469 zmatsuo 9340 edit = IDC_INI_SETUPDIR_EDIT;
470     edit_vstore = IDC_INI_SETUPDIR_EDIT_VSTORE;
471 zmatsuo 9339 open_dir = FALSE;
472 zmatsuo 9340 button_pressed = TRUE;
473 zmatsuo 9339 break;
474    
475     case IDC_KEYCNF_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
476 zmatsuo 9340 edit = IDC_KEYCNF_SETUPDIR_EDIT;
477     edit_vstore = IDC_KEYCNF_SETUPDIR_EDIT_VSTORE;
478 zmatsuo 9339 open_dir = TRUE;
479 zmatsuo 9340 button_pressed = TRUE;
480 zmatsuo 9339 break;
481 zmatsuo 9340
482 zmatsuo 9339 case IDC_KEYCNF_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
483 zmatsuo 9340 edit = IDC_KEYCNF_SETUPDIR_EDIT;
484     edit_vstore = IDC_KEYCNF_SETUPDIR_EDIT_VSTORE;
485 zmatsuo 9339 open_dir = FALSE;
486 zmatsuo 9340 button_pressed = TRUE;
487 zmatsuo 9339 break;
488    
489     case IDC_CYGTERM_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
490 zmatsuo 9340 edit = IDC_CYGTERM_SETUPDIR_EDIT;
491     edit_vstore = IDC_CYGTERM_SETUPDIR_EDIT_VSTORE;
492 zmatsuo 9339 open_dir = TRUE;
493 zmatsuo 9340 button_pressed = TRUE;
494 zmatsuo 9339 break;
495 zmatsuo 9340
496 zmatsuo 9339 case IDC_CYGTERM_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
497 zmatsuo 9340 edit = IDC_CYGTERM_SETUPDIR_EDIT;
498     edit_vstore = IDC_CYGTERM_SETUPDIR_EDIT_VSTORE;
499 zmatsuo 9339 open_dir = FALSE;
500 zmatsuo 9340 button_pressed = TRUE;
501 zmatsuo 9339 break;
502    
503     case IDC_SSH_SETUPDIR_BUTTON | (BN_CLICKED << 16) :
504 zmatsuo 9340 edit = IDC_SSH_SETUPDIR_EDIT;
505     edit_vstore = IDC_SSH_SETUPDIR_EDIT_VSTORE;
506 zmatsuo 9339 open_dir = TRUE;
507 zmatsuo 9340 button_pressed = TRUE;
508 zmatsuo 9339 break;
509 zmatsuo 9340
510 zmatsuo 9339 case IDC_SSH_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) :
511 zmatsuo 9340 edit = IDC_SSH_SETUPDIR_EDIT;
512     edit_vstore = IDC_SSH_SETUPDIR_EDIT_VSTORE;
513 zmatsuo 9339 open_dir = FALSE;
514 zmatsuo 9340 button_pressed = TRUE;
515 zmatsuo 9339 break;
516    
517     case IDCANCEL:
518     TTEndDialog(hDlgWnd, IDCANCEL);
519     return TRUE;
520     break;
521    
522     default:
523     return FALSE;
524     }
525    
526     if (button_pressed) {
527 zmatsuo 9340 wchar_t *filename_p;
528     if (!IsWindowEnabled(GetDlgItem(hDlgWnd, edit_vstore))) {
529     filename_p = GetWindowTextAlloc(GetDlgItem(hDlgWnd, edit));
530     } else {
531     filename_p = GetWindowTextAlloc(GetDlgItem(hDlgWnd, edit_vstore));
532     }
533 zmatsuo 9339
534 zmatsuo 9340 const char *UILanguageFile = pts->UILanguageFile;
535     if (open_dir) {
536     #if 0
537     // �t�H���_���J��
538     wchar_t *path_p = ExtractDirNameW(filename_p);
539     openDirectoryWithExplorer(path_p, UILanguageFile);
540     free(path_p);
541     #else
542     // �t�H���_���J�����A�t�@�C�����I������
543     openDirectoryWithExplorer(filename_p, UILanguageFile);
544     #endif
545     }
546     else {
547     char *editor = pts->ViewlogEditor;
548     openFileWithApplication(filename_p, editor, UILanguageFile);
549     }
550 zmatsuo 9339
551 zmatsuo 9340 free(filename_p);
552 zmatsuo 9339 return TRUE;
553     }
554     return FALSE;
555 zmatsuo 9340 }
556 zmatsuo 9339 case WM_CLOSE:
557     TTEndDialog(hDlgWnd, 0);
558     return TRUE;
559    
560     default:
561     return FALSE;
562     }
563     return TRUE;
564     }
565    
566 zmatsuo 9340 void SetupDirectoryDialog(HINSTANCE hInst, HWND hWnd, TTTSet *pts)
567 zmatsuo 9339 {
568 zmatsuo 9340 TTDialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SETUP_DIR_DIALOG),
569     hWnd, OnSetupDirectoryDlgProc, (LPARAM)pts);
570 zmatsuo 9339 }

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