BOOL WINAPI OnFreeConsole(void) { //typedef BOOL (WINAPI* OnFreeConsole_t)(void); ORIGINALFAST(FreeConsole); BOOL lbRc = FALSE; if (ph && ph->PreCallBack) { SETARGS(&lbRc); if (!ph->PreCallBack(&args)) return lbRc; } //ReleaseConsoleInputSemaphore(); lbRc = F(FreeConsole)(); if (ph && ph->PostCallBack) { SETARGS(&lbRc); ph->PostCallBack(&args); } return lbRc; }
BOOL WINAPI OnAllocConsole(void) { //typedef BOOL (WINAPI* OnAllocConsole_t)(void); ORIGINALFAST(AllocConsole); BOOL lbRc = FALSE, lbAllocated = FALSE; COORD crLocked; HMODULE hKernel = NULL; DWORD nErrCode = 0; BOOL lbAttachRc = FALSE; HWND hOldConWnd = GetRealConsoleWindow(); if (ph && ph->PreCallBack) { SETARGS(&lbRc); if (!ph->PreCallBack(&args)) return lbRc; } if (gbPrepareDefaultTerminal && gbIsNetVsHost) { if (!ghConWnd) gnVsHostStartConsole = 2; else gnVsHostStartConsole = 0; } // Попытаться создать консольное окно "по тихому" if (gpDefTerm && !hOldConWnd && !gnServerPID) { HWND hCreatedCon = gpDefTerm->AllocHiddenConsole(false); if (hCreatedCon) { hOldConWnd = hCreatedCon; lbAllocated = TRUE; } } // GUI приложение во вкладке. Если окна консоли еще нет - попробовать прицепиться // к родительской консоли (консоли серверного процесса) if ((gbAttachGuiClient || ghAttachGuiClient) && !gbPrepareDefaultTerminal) { if (AttachServerConsole()) { hOldConWnd = GetRealConsoleWindow(); lbAllocated = TRUE; // Консоль уже есть, ничего не надо } } DefTermMsg(L"AllocConsole calling"); if (!lbAllocated && F(AllocConsole)) { lbRc = F(AllocConsole)(); if (lbRc && !gbPrepareDefaultTerminal && IsVisibleRectLocked(crLocked)) { // Размер _видимой_ области. Консольным приложениям запрещено менять его "изнутри". // Размер может менять только пользователь ресайзом окна ConEmu HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi = {}; if (GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //specified width and height cannot be less than the width and height of the console screen buffer's window SMALL_RECT rNewRect = {0, 0, crLocked.X-1, crLocked.Y-1}; OnSetConsoleWindowInfo(hStdOut, TRUE, &rNewRect); #ifdef _DEBUG COORD crNewSize = {crLocked.X, max(crLocked.Y, csbi.dwSize.Y)}; #endif hkFunc.setConsoleScreenBufferSize(hStdOut, crLocked); } } } //InitializeConsoleInputSemaphore(); if (ph && ph->PostCallBack) { SETARGS(&lbRc); ph->PostCallBack(&args); } HWND hNewConWnd = GetRealConsoleWindow(); // Обновить ghConWnd и мэппинг OnConWndChanged(hNewConWnd); #ifdef _DEBUG //_ASSERTEX(lbRc && ghConWnd); wchar_t szAlloc[500], szFile[MAX_PATH]; GetModuleFileName(NULL, szFile, countof(szFile)); msprintf(szAlloc, countof(szAlloc), L"OnAllocConsole\nOld=x%08X, New=x%08X, ghConWnd=x%08X\ngbPrepareDefaultTerminal=%i, gbIsNetVsHost=%i\n%s", LODWORD(hOldConWnd), LODWORD(hNewConWnd), LODWORD(ghConWnd), gbPrepareDefaultTerminal, gbIsNetVsHost, szFile); // VisualStudio host file calls AllocConsole TWICE(!) // Second call is totally spare (console already created) //MessageBox(NULL, szAlloc, L"OnAllocConsole called", MB_SYSTEMMODAL); #endif if (hNewConWnd && (hNewConWnd != hOldConWnd) && gpDefTerm && gbIsNetVsHost) { DefTermMsg(L"Calling gpDefTerm->OnAllocConsoleFinished"); gpDefTerm->OnAllocConsoleFinished(); SetLastError(0); } else if (hNewConWnd) { DefTermMsg(L"Console was already allocated"); } else { DefTermMsg(L"Something was wrong"); } TODO("Можно бы по настройке установить параметры. Кодовую страницу, например"); return lbRc; }
void DtkshRegisterNamedIntConverters( void ) { XtConvertArgRec args[1]; #define SETARGS(X) args[0].address_mode = XtAddress; args[0].address_id = (caddr_t)&X[0]; args[0].size = sizeof(X); /* Special!! Converts string to named value */ SETARGS(NI_TraversalDirection); XtAddConverter(XmRString, "TraversalDirection", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_CommandChild); XtAddConverter(XmRString, "CommandChildType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_MessageBoxChild); XtAddConverter(XmRString, "MessageBoxChildType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_FileSelChild); XtAddConverter(XmRString, "FileSelChildType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_SelBoxChild); XtAddConverter(XmRString, "SelBoxChildType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_QuickHelpChildType); XtAddConverter(XmRString, "QuickHelpChildType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_HelpType); XtAddConverter(XmRString, "HelpType", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_HelpScrollBarDisplayPolicy); XtAddConverter(XmRString, "HelpScrollBarDisplayPolicy", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TextHighlightMode); XtAddConverter(XmRString, "TextHighlightMode", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TextSearchDirection); XtAddConverter(XmRString, "TextSearchDirection", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TextFormat); XtAddConverter(XmRString, "TextFormat", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TT_OP); XtAddConverter(XmRString, "TtOp", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TT_SCOPE); XtAddConverter(XmRString, "TtScope", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TT_STATUS); XtAddConverter(XmRString, "TtStatus", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_TEAR_OFF); XtAddConverter(XmRString, XmRTearOffModel, DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_WIN_GRAVITY); XtAddConverter(XmRString, "XWinGravity", DtkshCvtStringToNamedValue, args, 1); SETARGS(NI_MWMInputMode); XtAddConverter(XmRString, "MWMInputMode", DtkshCvtStringToNamedValue, args, 1); /* The rest of these convert named values into strings */ SETARGS(NI_ArrowDirection); XtAddConverter(XmRArrowDirection, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_MultiClick); XtAddConverter(XmRMultiClick, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_DialogStyle); XtAddConverter(XmRDialogStyle, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_MWMInputMode); XtAddConverter("MWMInputMode", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ResizePolicy); XtAddConverter(XmRResizePolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_FileTypeMask); XtAddConverter(XmRFileTypeMask, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ShadowType); XtAddConverter(XmRShadowType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Attachment); XtAddConverter(XmRAttachment, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ChildType); XtAddConverter(XmRChildType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Alignment); XtAddConverter(XmRChildHorizontalAlignment, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ChildVerticalAlignment); XtAddConverter(XmRChildVerticalAlignment, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_UnitType); XtAddConverter(XmRUnitType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_NavigationType); XtAddConverter(XmRNavigationType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Alignment); XtAddConverter(XmRAlignment, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_LabelType); XtAddConverter(XmRLabelType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_StringDirection); XtAddConverter(XmRStringDirection, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_SelectionPolicy); XtAddConverter(XmRSelectionPolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ScrollBarPlacement); XtAddConverter(XmRScrollBarPlacement, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ScrollBarDisplayPolicy); XtAddConverter(XmRScrollBarDisplayPolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ScrollingPolicy); XtAddConverter(XmRScrollingPolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_VisualPolicy); XtAddConverter(XmRVisualPolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ListSizePolicy); XtAddConverter(XmRListSizePolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_EditMode); XtAddConverter(XmREditMode, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_CommandWindowLocation); XtAddConverter(XmRCommandWindowLocation, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_DefaultButtonType); XtAddConverter(XmRDefaultButtonType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_DialogType); XtAddConverter(XmRDialogType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_EntryVerticalAlignment); XtAddConverter(XmRVerticalAlignment, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Orientation); XtAddConverter(XmROrientation, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Packing); XtAddConverter(XmRPacking, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_RowColumnType); XtAddConverter(XmRRowColumnType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ProcessingDirection); XtAddConverter(XmRProcessingDirection, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ChildPlacement); XtAddConverter(XmRChildPlacement, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_SelectionDialogType); XtAddConverter(XmRSelectionType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_SeparatorType); XtAddConverter(XmRSeparatorType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_IndicatorType); XtAddConverter(XmRIndicatorType, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_AudibleWarning); XtAddConverter(XmRAudibleWarning, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_DeleteResponse); XtAddConverter(XmRDeleteResponse, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_KeyboardFocusPolicy); XtAddConverter(XmRKeyboardFocusPolicy, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_InitialState); XtAddConverter(XmRInitialState, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_HelpReturnSelectedWidgetResultType); XtAddConverter("HelpReturnSelectedWidgetResultType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_HelpType); XtAddConverter("HelpType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_HelpScrollBarDisplayPolicy); XtAddConverter("HelpScrollBarDisplayPolicy", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_Button); XtAddConverter("XE_Button", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_EventType); XtAddConverter("XE_EventType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_XBool); XtAddConverter("X_Bool", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_TraversalDirection); XtAddConverter("TraversalDirection", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_VisibilityType); XtAddConverter("VisibilityType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_ListSelectionType); XtAddConverter("ListSelectionType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_TextFormat); XtAddConverter("TextFormat", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_HelpHyperType); XtAddConverter("HelpHyperType", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_TT_STATUS); XtAddConverter("TtStatus", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_TT_OP); XtAddConverter("TtOp", XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_TEAR_OFF); XtAddConverter(XmRTearOffModel, XtRString, DtkshCvtNamedValueToString, args, 1); SETARGS(NI_WIN_GRAVITY); XtAddConverter("XWinGravity", XtRString, DtkshCvtNamedValueToString, args, 1); }