(empty log message)
| @@ -1,7 +1,10 @@ | ||
| 1 | 1 | /** |
| 2 | 2 | * TTXMacroMenu.c |
| 3 | + * | |
| 4 | + * Last Update : 2013/06/01 | |
| 5 | + * Author : chibiegg, bibineko | |
| 6 | + * URL : http://sourceforge.jp/projects/ttxmacromenu/ | |
| 3 | 7 | * |
| 4 | - * | |
| 5 | 8 | */ |
| 6 | 9 | #include "teraterm.h" |
| 7 | 10 | #include "tttypes.h" |
| @@ -19,7 +22,7 @@ | ||
| 19 | 22 | #define SECTION "TTXMacroMenu" |
| 20 | 23 | |
| 21 | 24 | #define ID_MENUID_BASE 55101 |
| 22 | -#define MAX_MENU_ITEMS 10 | |
| 25 | +#define MAX_MENU_ITEMS 99 | |
| 23 | 26 | |
| 24 | 27 | static HANDLE hInst; /* Instance handle of TTX*.DLL */ |
| 25 | 28 |
| @@ -26,11 +29,12 @@ | ||
| 26 | 29 | typedef struct { |
| 27 | 30 | PTTSet ts; |
| 28 | 31 | PComVar cv; |
| 29 | - HMENU ResizeMenu; /* Menu Hander for Menu Items */ | |
| 32 | + HMENU MacroMenu; /* Menu Hander for Menu Items */ | |
| 30 | 33 | BOOL ReplaceTermDlg; |
| 31 | 34 | PReadIniFile origReadIniFile; |
| 32 | 35 | int MenuItems; /* Number of Menu Items */ |
| 33 | 36 | char MacroList[MAX_MENU_ITEMS][512]; |
| 37 | + int MacroKeycode[MAX_MENU_ITEMS]; | |
| 34 | 38 | } TInstVar; |
| 35 | 39 | |
| 36 | 40 | static TInstVar FAR * pvar; |
| @@ -39,7 +43,6 @@ | ||
| 39 | 43 | static TInstVar InstVar; |
| 40 | 44 | |
| 41 | 45 | |
| 42 | - | |
| 43 | 46 | /** |
| 44 | 47 | * InitMenu |
| 45 | 48 | */ |
| @@ -47,21 +50,21 @@ | ||
| 47 | 50 | char *fname; |
| 48 | 51 | int i; |
| 49 | 52 | |
| 50 | - if (pvar->ResizeMenu != NULL) { | |
| 51 | - DestroyMenu(pvar->ResizeMenu); | |
| 53 | + if (pvar->MacroMenu != NULL) { | |
| 54 | + DestroyMenu(pvar->MacroMenu); | |
| 52 | 55 | } |
| 53 | 56 | |
| 54 | 57 | if (pvar->MenuItems > 0) { |
| 55 | - pvar->ResizeMenu = CreateMenu(); | |
| 58 | + pvar->MacroMenu = CreateMenu(); | |
| 56 | 59 | |
| 57 | 60 | for (i=0; i < pvar->MenuItems; i++) { |
| 58 | 61 | fname = pvar->MacroList[i]; |
| 59 | 62 | |
| 60 | - InsertMenu(pvar->ResizeMenu, -1, MF_BYPOSITION, ID_MENUID_BASE+i, fname); | |
| 63 | + InsertMenu(pvar->MacroMenu, -1, MF_BYPOSITION, ID_MENUID_BASE+i, fname); | |
| 61 | 64 | } |
| 62 | 65 | } |
| 63 | 66 | else { |
| 64 | - pvar->ResizeMenu = NULL; | |
| 67 | + pvar->MacroMenu = NULL; | |
| 65 | 68 | } |
| 66 | 69 | } |
| 67 | 70 |
| @@ -69,7 +72,7 @@ | ||
| 69 | 72 | pvar->ts = ts; |
| 70 | 73 | pvar->cv = cv; |
| 71 | 74 | pvar->ReplaceTermDlg = FALSE; |
| 72 | - pvar->ResizeMenu = NULL; | |
| 75 | + pvar->MacroMenu = NULL; | |
| 73 | 76 | pvar->MenuItems = 0; |
| 74 | 77 | } |
| 75 | 78 |
| @@ -91,17 +94,35 @@ | ||
| 91 | 94 | * TTXMacroMenuReadIniFile |
| 92 | 95 | */ |
| 93 | 96 | static void PASCAL FAR TTXMacroMenuReadIniFile(PCHAR fn, PTTSet ts) { |
| 94 | - int i; | |
| 95 | - char Key[20], FileName[512]; | |
| 97 | + int i,itemnum; | |
| 98 | + size_t k; | |
| 99 | + char IniFileName[512]; | |
| 100 | + char Key[20], Temp[512], FileName[512]; | |
| 101 | + int keycode,keytype; | |
| 96 | 102 | |
| 103 | + | |
| 97 | 104 | (pvar->origReadIniFile)(fn, ts); |
| 105 | + | |
| 106 | + itemnum=0; | |
| 107 | + for (i=0;i<NumOfUserKey;i++) { | |
| 108 | + _snprintf_s(Key, sizeof(Key), _TRUNCATE, "User%d", i+1); | |
| 109 | + memcpy(IniFileName,fn,strlen(fn)+1); | |
| 110 | + for(k=strlen(IniFileName);k>0;k--){ | |
| 111 | + if(IniFileName[k] == '\\'){ | |
| 112 | + memcpy(&IniFileName[k+1],"KEYBOARD.CNF",13); | |
| 113 | + break; | |
| 114 | + } | |
| 115 | + } | |
| 98 | 116 | |
| 99 | - for (i=0; i<MAX_MENU_ITEMS; i++) { | |
| 100 | - _snprintf_s(Key, sizeof(Key), _TRUNCATE, "TTL%d", i+1); | |
| 101 | - GetPrivateProfileString(SECTION, Key, "\n", FileName, sizeof(FileName), fn); | |
| 117 | + GetPrivateProfileString("User keys", Key, "", Temp, sizeof(Temp),IniFileName); | |
| 102 | 118 | |
| 103 | - if ( (strlen(FileName) > 0) && PathFileExists(FileName) ) { | |
| 104 | - strcpy_s(pvar->MacroList[i],512, FileName); | |
| 119 | + if ( (strlen(Temp) > 0) ) { | |
| 120 | + sscanf_s(Temp,"%d,%d,%s",&keycode,&keytype,FileName); | |
| 121 | + if( keytype==2 && PathFileExists(FileName)){ | |
| 122 | + strcpy_s(pvar->MacroList[itemnum],512, FileName); | |
| 123 | + pvar->MacroKeycode[itemnum] = keycode; | |
| 124 | + itemnum++; | |
| 125 | + } | |
| 105 | 126 | } |
| 106 | 127 | else { |
| 107 | 128 | break; |
| @@ -108,7 +129,7 @@ | ||
| 108 | 129 | } |
| 109 | 130 | } |
| 110 | 131 | |
| 111 | - pvar->MenuItems = i; | |
| 132 | + pvar->MenuItems = itemnum; | |
| 112 | 133 | } |
| 113 | 134 | |
| 114 | 135 | static void PASCAL FAR TTXGetSetupHooks(TTXSetupHooks FAR * hooks) { |
| @@ -126,7 +147,7 @@ | ||
| 126 | 147 | mi.cbSize = sizeof(mi); |
| 127 | 148 | mi.fMask = MIIM_TYPE | MIIM_SUBMENU; |
| 128 | 149 | mi.fType = MFT_STRING; |
| 129 | - mi.hSubMenu = pvar->ResizeMenu; | |
| 150 | + mi.hSubMenu = pvar->MacroMenu; | |
| 130 | 151 | mi.dwTypeData = "TTXMM"; |
| 131 | 152 | InsertMenuItem(menu, ID_HELPMENU, FALSE, &mi); |
| 132 | 153 | } |
| @@ -140,33 +161,13 @@ | ||
| 140 | 161 | */ |
| 141 | 162 | static int PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) { |
| 142 | 163 | int num; |
| 164 | + | |
| 143 | 165 | if (cmd >= ID_MENUID_BASE && cmd < ID_MENUID_BASE + pvar->MenuItems) { |
| 144 | 166 | num = cmd - ID_MENUID_BASE; |
| 145 | 167 | |
| 146 | - /* | |
| 147 | - if (pvar->ResizeList[num][0] > 0) | |
| 148 | - pvar->ts->TerminalWidth = pvar->ResizeList[num][0]; | |
| 149 | - if (pvar->ResizeList[num][1] > 0) | |
| 150 | - pvar->ts->TerminalHeight = pvar->ResizeList[num][1]; | |
| 151 | - pvar->ReplaceTermDlg = TRUE; | |
| 152 | - */ | |
| 153 | - | |
| 154 | - // Call Setup-Terminal dialog | |
| 155 | - //SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0); | |
| 156 | - //SendMessage(hWin, WM_KEYDOWN, VK_SPACE, MAKELPARAM(MAKEWORD(1,0),MAKEWORD(0,64))); | |
| 157 | - //SendMessage(hWin, WM_KEYUP, VK_SPACE, NULL);] | |
| 158 | - if(num==0){ | |
| 159 | - //MessageBox(pvar->cv->HWin,"Exec","",0); | |
| 160 | - //PostMessage(hWin, WM_KEYDOWN, VK_CONTROL, 0); | |
| 161 | - PostMessage(hWin, WM_KEYDOWN, VK_F8, MAKELPARAM(MAKEWORD(1,0),MAKEWORD(0,64))); | |
| 162 | - | |
| 163 | - PostMessage(hWin, WM_KEYUP, VK_F8, 0); | |
| 164 | - //PostMessage(hWin, WM_KEYUP, VK_CONTROL, 0); | |
| 165 | - | |
| 166 | - /* | |
| 167 | - PostMessage(hWin, WM_KEYDOWN, MapVirtualKey(2,1), MAKELPARAM(MAKEWORD(1,0),MAKEWORD(0,64)) ); | |
| 168 | - PostMessage(hWin, WM_KEYUP, MapVirtualKey(2,1), 0); | |
| 169 | - */ | |
| 168 | + if(num>=0 && num<pvar->MenuItems){ | |
| 169 | + PostMessage(hWin, WM_KEYDOWN, MapVirtualKey(pvar->MacroKeycode[num],1), MAKELPARAM(MAKEWORD(1,0),MAKEWORD(0,64))); | |
| 170 | + PostMessage(hWin, WM_KEYUP, MapVirtualKey(pvar->MacroKeycode[num],1), 0); | |
| 170 | 171 | } |
| 171 | 172 | return 1; |
| 172 | 173 | } |