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 9503 - (hide annotations) (download) (as text)
Fri Oct 29 15:18:57 2021 UTC (2 years, 5 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/setupdirdlg.cpp
File MIME type: text/x-c++src
File size: 16179 byte(s)
TTXReadKnownHostsFile() APIを変更、Unicode 化

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

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