/* $Id$ * * WINDOW.C - activate & window internal commands. * * clone from 4nt activate command * * 10 Sep 1999 (Paolo Pantaleo) * started (window command in WINDOW.c) * * 29 Sep 1999 (Paolo Pantaleo) * activate and window in a single file using mainly the same code * (nice size optimization :) * * 30-Apr-2005 (Magnus Olsen) ) * Remove all hardcode string to En.rc */ #include #if ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) ) #define A_MIN 0x01 #define A_MAX 0x02 #define A_RESTORE 0x04 #define A_POS 0x08 #define A_SIZE 0x10 #define A_CLOSE 0x20 /*service funciton to perform actions on windows param is a string to parse for options/actions hWnd is the handle of window on wich perform actions */ static INT ServiceActivate (LPTSTR param, HWND hWnd) { LPTSTR *p = 0, p_tmp; INT argc = 0, i; INT iAction = 0; LPTSTR title = 0; WINDOWPLACEMENT wp; RECT pos; LPTSTR tmp; if (*param) p = split(param, &argc, FALSE); for (i = 0; i < argc; i++) { p_tmp = p[i]; if (*p_tmp == _T('/')) p_tmp++; if (_tcsicmp(p_tmp, _T("min")) == 0) { iAction |= A_MIN; continue; } if (_tcsicmp(p_tmp, _T("max")) == 0) { iAction |= A_MAX; continue; } if (_tcsicmp(p_tmp, _T("restore")) == 0) { iAction |= A_RESTORE; continue; } if (_tcsicmp(p_tmp, _T("close")) == 0) { iAction |= A_CLOSE; continue; } if (_tcsnicmp(p_tmp, _T("pos"), 3) == 0) { iAction |= A_POS; tmp = p_tmp+3; if (*tmp == _T('=')) tmp++; pos.left= _ttoi(tmp); if(!(tmp=_tcschr(tmp, _T(',')))) { error_invalid_parameter_format(p[i]); freep(p); return 1; } pos.top = _ttoi (++tmp); if(!(tmp=_tcschr(tmp, _T(',')))) { error_invalid_parameter_format(p[i]); freep(p); return 1; } pos.right = _ttoi(++tmp) + pos.left; if (!(tmp = _tcschr(tmp, _T(',')))) { error_invalid_parameter_format(p[i]); freep(p); return 1; } pos.bottom = _ttoi(++tmp) + pos.top; continue; } if (_tcsnicmp(p_tmp, _T("size"), 4)==0) { iAction |=A_SIZE; continue; } /* none of them=window title */ if (title) { error_invalid_parameter_format(p[i]); freep(p); return 1; } if (p_tmp[0] == _T('"')) { title = (p_tmp + 1); *_tcschr(p_tmp + 1, _T('"')) = 0; continue; } title = p_tmp; } if (title) SetWindowText(hWnd, title); wp.length = sizeof(WINDOWPLACEMENT); GetWindowPlacement(hWnd, &wp); if (iAction & A_POS) wp.rcNormalPosition = pos; if (iAction & A_MIN) wp.showCmd = SW_MINIMIZE; if (iAction & A_MAX) wp.showCmd = SW_SHOWMAXIMIZED; /*if no actions are specified default is SW_RESTORE*/ if ((iAction & A_RESTORE) || (!iAction)) wp.showCmd = SW_RESTORE; if (iAction & A_CLOSE) { FIXME("!!!FIXME: CLOSE Not implemented!!!\n"); } wp.length = sizeof(WINDOWPLACEMENT); SetWindowPlacement(hWnd, &wp); if (p) freep(p); return 0; } INT CommandWindow (LPTSTR param) { HWND hwnd; if (_tcsncmp (param, _T("/?"), 2) == 0) { ConOutResPaging(TRUE,STRING_WINDOW_HELP1); return 0; } hwnd = GetConsoleWindow(); Sleep(0); return ServiceActivate(param, hwnd); } INT CommandActivate (LPTSTR param) { HWND hwnd; LPTSTR *arg; INT argc; if (_tcsncmp (param, _T("/?"), 2) == 0) { ConOutResPaging(TRUE,STRING_WINDOW_HELP2); return 0; } if(!(*param)) return 1; /*Split the user input into array*/ arg = split (param, &argc, FALSE); if(argc < 2) { if(arg != NULL) freep(arg); } hwnd = FindWindow(NULL, arg[0]); if (hwnd == NULL) { if(arg != NULL) freep(arg); ConErrResPuts(STRING_WINDOW_ERROR1); return 1; } if(arg != NULL) freep(arg); return ServiceActivate(param, hwnd); } #endif /* ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) ) */