svnno****@sourc*****
svnno****@sourc*****
2015年 8月 17日 (月) 21:01:21 JST
Revision: 5947 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5947 Author: yutakapon Date: 2015-08-17 21:01:21 +0900 (Mon, 17 Aug 2015) Log Message: ----------- チケット #35205 設定フォルダ:改善項目 ファイルとフォルダのいずれかを開けるように、ファイル用のボタンを追加した。 Ticket Links: ------------ http://sourceforge.jp/projects/ttssh2/tracker/detail/35205 Modified Paths: -------------- trunk/installer/release/lang/English.lng trunk/installer/release/lang/French.lng trunk/installer/release/lang/German.lng trunk/installer/release/lang/Japanese.lng trunk/installer/release/lang/Korean.lng trunk/installer/release/lang/Russian.lng trunk/installer/release/lang/Simplified Chinese.lng trunk/installer/release/lang/Traditional Chinese.lng trunk/teraterm/common/tt_res.h trunk/teraterm/teraterm/ttermpro.rc trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/installer/release/lang/English.lng =================================================================== --- trunk/installer/release/lang/English.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/English.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -269,6 +269,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=Cannot use winsock Modified: trunk/installer/release/lang/French.lng =================================================================== --- trunk/installer/release/lang/French.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/French.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=Impossible d'utiliser winsock Modified: trunk/installer/release/lang/German.lng =================================================================== --- trunk/installer/release/lang/German.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/German.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=Kann Winsock nicht verwenden Modified: trunk/installer/release/lang/Japanese.lng =================================================================== --- trunk/installer/release/lang/Japanese.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/Japanese.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -269,6 +269,8 @@ DLG_SETUPDIR_KEYBOARDFILE=\x83L\x81[\x83{\x81[\x83h\x90ݒ\xE8\x83t\x83@\x83C\x83\x8B DLG_SETUPDIR_CYGTERMFILE=CygTerm\x90ݒ\xE8\x83t\x83@\x83C\x83\x8B DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts\x83t\x83@\x83C\x83\x8B +DLG_SETUPDIR_NOFILE_ERROR=\x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82܂\xB9\x82\xF1(%d) +DLG_SETUPDIR_OPENFILE_ERROR=\x83t\x83@\x83C\x83\x8B\x82\xAA\x8AJ\x82\xAF\x82܂\xB9\x82\xF1(%d) ; commonlib.c MSG_WINSOCK_ERROR=Winsock \x82\xAA\x8Eg\x82\xA6\x82܂\xB9\x82\xF1 Modified: trunk/installer/release/lang/Korean.lng =================================================================== --- trunk/installer/release/lang/Korean.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/Korean.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=\xC0\xA9\xBC\xD3\xC0\xBB \xBB\xE7\xBF\xEB\xC7\xD2 \xBC\xF6 \xBE\xF8\xBD\xC0\xB4ϴ\xD9 Modified: trunk/installer/release/lang/Russian.lng =================================================================== --- trunk/installer/release/lang/Russian.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/Russian.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=\xCD\xE5 \xF3\xE4\xE0\xE5\xF2\xF1\xFF \xE8\xF1\xEF\xEE\xEB\xFC\xE7\xEE\xE2\xE0\xF2\xFC winsock Modified: trunk/installer/release/lang/Simplified Chinese.lng =================================================================== --- trunk/installer/release/lang/Simplified Chinese.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/Simplified Chinese.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=\xCE\xA8ʹ\xD3\xC3 Winsock Modified: trunk/installer/release/lang/Traditional Chinese.lng =================================================================== --- trunk/installer/release/lang/Traditional Chinese.lng 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/installer/release/lang/Traditional Chinese.lng 2015-08-17 12:01:21 UTC (rev 5947) @@ -270,6 +270,8 @@ DLG_SETUPDIR_KEYBOARDFILE=Keyboard Configuration File DLG_SETUPDIR_CYGTERMFILE=CygTerm Configuration File DLG_SETUPDIR_KNOWNHOSTSFILE=Known_hosts File +DLG_SETUPDIR_NOFILE_ERROR=File does not exist.(%d) +DLG_SETUPDIR_OPENFILE_ERROR=Cannot open file.(%d) ; commonlib.c MSG_WINSOCK_ERROR=\xB5L\xAAk\xA8ϥ\xCE Winsock Modified: trunk/teraterm/common/tt_res.h =================================================================== --- trunk/teraterm/common/tt_res.h 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/teraterm/common/tt_res.h 2015-08-17 12:01:21 UTC (rev 5947) @@ -191,6 +191,11 @@ #define IDC_KEYCNF_SETUPDIR_STATIC 2542 #define IDC_CYGTERM_SETUPDIR_STATIC 2543 #define IDC_SSH_SETUPDIR_STATIC 2547 +#define IDC_INI_SETUPDIR_BUTTON_FILE 2548 +#define IDC_KEYCNF_SETUPDIR_BUTTON_FILE 2549 +#define IDC_CYGTERM_SETUPDIR_BUTTON_FILE 2550 +#define IDC_CYGTERM_SETUPDIR_BUTTON_FILE2 2551 +#define IDC_SSH_SETUPDIR_BUTTON_FILE 2551 #define ID_ACC_SENDBREAK 50001 #define ID_ACC_COPY 50002 #define ID_ACC_NEWCONNECTION 50003 @@ -288,7 +293,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 124 #define _APS_NEXT_COMMAND_VALUE 52031 -#define _APS_NEXT_CONTROL_VALUE 2548 +#define _APS_NEXT_CONTROL_VALUE 2550 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Modified: trunk/teraterm/teraterm/ttermpro.rc =================================================================== --- trunk/teraterm/teraterm/ttermpro.rc 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/teraterm/teraterm/ttermpro.rc 2015-08-17 12:01:21 UTC (rev 5947) @@ -32,15 +32,19 @@ LTEXT "Tera Term Configuration File",IDC_INI_SETUPDIR_STATIC,7,15,57,17 EDITTEXT IDC_INI_SETUPDIR_EDIT,73,16,253,14,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "...",IDC_INI_SETUPDIR_BUTTON,338,16,26,14 + PUSHBUTTON "File",IDC_INI_SETUPDIR_BUTTON_FILE,372,16,26,14 LTEXT "Keyboard Configuration File",IDC_KEYCNF_SETUPDIR_STATIC,7,42,61,17 EDITTEXT IDC_KEYCNF_SETUPDIR_EDIT,73,41,253,14,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "...",IDC_KEYCNF_SETUPDIR_BUTTON,338,41,26,14 + PUSHBUTTON "File",IDC_KEYCNF_SETUPDIR_BUTTON_FILE,372,41,26,14 LTEXT "CygTerm Configuration File",IDC_CYGTERM_SETUPDIR_STATIC,7,68,60,17 EDITTEXT IDC_CYGTERM_SETUPDIR_EDIT,73,67,253,14,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "...",IDC_CYGTERM_SETUPDIR_BUTTON,338,67,26,14 + PUSHBUTTON "File",IDC_CYGTERM_SETUPDIR_BUTTON_FILE,372,67,26,14 LTEXT "Known_hosts File",IDC_SSH_SETUPDIR_STATIC,9,94,54,15 EDITTEXT IDC_SSH_SETUPDIR_EDIT,73,93,253,14,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "...",IDC_SSH_SETUPDIR_BUTTON,338,93,26,14 + PUSHBUTTON "File",IDC_SSH_SETUPDIR_BUTTON_FILE,372,93,26,14 END Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2015-08-17 05:23:19 UTC (rev 5946) +++ trunk/teraterm/teraterm/vtwin.cpp 2015-08-17 12:01:21 UTC (rev 5947) @@ -4560,6 +4560,59 @@ // +// \x8Ew\x92肵\x82\xBD\x83A\x83v\x83\x8A\x83P\x81[\x83V\x83\x87\x83\x93\x82Ńt\x83@\x83C\x83\x8B\x82\xF0\x8AJ\x82\xAD\x81B +// +// return TRUE: success +// FALSE: failure +// +static BOOL openFileWithApplication(char *pathname, char *filename, char *editor) +{ + char command[1024]; + char fullpath[1024]; + STARTUPINFO si; + PROCESS_INFORMATION pi; + BOOL ret = FALSE; + char buf[80]; + char uimsg[MAX_UIMSG]; + + SetLastError(NO_ERROR); + + _snprintf_s(fullpath, sizeof(fullpath), "%s\\%s", pathname, filename); + if (_access(fullpath, 0) != 0) { // \x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2 + DWORD no = GetLastError(); + get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile); + get_lang_msg("DLG_SETUPDIR_NOFILE_ERROR", ts.UIMsg, sizeof(ts.UIMsg), + "File does not exist.(%d)", ts.UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts.UIMsg, no); + ::MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONWARNING); + goto error; + } + + _snprintf_s(command, sizeof(command), _TRUNCATE, "%s \"%s\"", editor, fullpath); + + memset(&si, 0, sizeof(si)); + GetStartupInfo(&si); + memset(&pi, 0, sizeof(pi)); + + if (CreateProcess(NULL, command, NULL, NULL, FALSE, 0, + NULL, NULL, &si, &pi) == 0) { // \x8BN\x93\xAE\x8E\xB8\x94s + DWORD no = GetLastError(); + get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile); + get_lang_msg("DLG_SETUPDIR_OPENFILE_ERROR", ts.UIMsg, sizeof(ts.UIMsg), + "Cannot open file.(%d)", ts.UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts.UIMsg, no); + ::MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONWARNING); + goto error; + } + + ret = TRUE; + +error:; + return (ret); +} + + +// // \x83G\x83N\x83X\x83v\x83\x8D\x81[\x83\x89\x82Ńp\x83X\x82\xF0\x8AJ\x82\xAD\x81B // // return TRUE: success @@ -4612,9 +4665,9 @@ // return TRUE: success // FALSE: failure // -static BOOL openVirtualStore(char *path, char *filename) +static BOOL openVirtualStore(char *path, char *filename, BOOL open_directory_only, char *open_editor) { -#if _MSC_VER == 1400 +#if _MSC_VER == 1400 // VSC2005(VC8.0) typedef struct _TOKEN_ELEVATION { DWORD TokenIsElevated; } TOKEN_ELEVATION, *PTOKEN_ELEVATION; @@ -4645,6 +4698,8 @@ DWORD dwType; BYTE bValue; + OutputDebugPrintf("[%s][%s] open_directory_only %d\n", path, filename, open_directory_only); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); // Windows Vista\x88ȑO\x82͖\xB3\x8E\x8B\x82\xB7\x82\xE9\x81B @@ -4728,13 +4783,23 @@ goto error; } - openDirectoryWithExplorer(shPath); + if (open_directory_only) { + openDirectoryWithExplorer(shPath); + } + else { + openFileWithApplication(shPath, filename, open_editor); + } ret = TRUE; return (ret); error: - openDirectoryWithExplorer(path); + if (open_directory_only) { + openDirectoryWithExplorer(path); + } + else { + openFileWithApplication(path, filename, open_editor); + } return (ret); } @@ -4752,6 +4817,9 @@ PSSH_read_known_hosts_file func = NULL; HMODULE h = NULL; static char hostsfilepath[MAX_PATH], hostsfilename[MAX_PATH]; + char *path_p, *filename_p; + BOOL open_dir; + int button_pressed; switch (msg) { case WM_INITDIALOG: @@ -4827,22 +4895,59 @@ return TRUE; case WM_COMMAND: + button_pressed = 0; switch (LOWORD(wp)) { case IDC_INI_SETUPDIR_BUTTON | (BN_CLICKED << 16) : - openVirtualStore(inipath, inifilename); - return TRUE; + open_dir = TRUE; + path_p = inipath; + filename_p = inifilename; + button_pressed = 1; + break; + case IDC_INI_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) : + open_dir = FALSE; + path_p = inipath; + filename_p = inifilename; + button_pressed = 1; + break; case IDC_KEYCNF_SETUPDIR_BUTTON | (BN_CLICKED << 16) : - openVirtualStore(keycnfpath, keycnfpath); - return TRUE; + open_dir = TRUE; + path_p = keycnfpath; + filename_p = keycnffilename; + button_pressed = 1; + break; + case IDC_KEYCNF_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) : + open_dir = FALSE; + path_p = keycnfpath; + filename_p = keycnffilename; + button_pressed = 1; + break; case IDC_CYGTERM_SETUPDIR_BUTTON | (BN_CLICKED << 16) : - openVirtualStore(cygtermpath, cygtermfilename); - return TRUE; + open_dir = TRUE; + path_p = cygtermpath; + filename_p = cygtermfilename; + button_pressed = 1; + break; + case IDC_CYGTERM_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) : + open_dir = FALSE; + path_p = cygtermpath; + filename_p = cygtermfilename; + button_pressed = 1; + break; case IDC_SSH_SETUPDIR_BUTTON | (BN_CLICKED << 16) : - openVirtualStore(hostsfilepath, hostsfilename); - return TRUE; + open_dir = TRUE; + path_p = hostsfilepath; + filename_p = hostsfilename; + button_pressed = 1; + break; + case IDC_SSH_SETUPDIR_BUTTON_FILE | (BN_CLICKED << 16) : + open_dir = FALSE; + path_p = hostsfilepath; + filename_p = hostsfilename; + button_pressed = 1; + break; case IDCANCEL: EndDialog(hDlgWnd, IDCANCEL); @@ -4852,6 +4957,18 @@ return FALSE; } + if (button_pressed) { + char *app = NULL; + + if (open_dir) + app = NULL; + else + app = ts.ViewlogEditor; + + openVirtualStore(path_p, filename_p, open_dir, app); + return TRUE; + } + case WM_CLOSE: EndDialog(hDlgWnd, 0); return TRUE;