Exemple #1
0
int _tmain(int argc, _TCHAR* argv[])
{
    //TestAdd();

    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO csbi = { 0 };
    GetConsoleScreenBufferInfo(hStdOut, &csbi);

    // TODO Handle no command line parameters - ie show help
    // TODO Handle colorizing hStdIn

    try
    {
        std::wstring sConf(_T("default.rgc"));
        bool bDefaultConf = true;
        std::wstring sCmdLine;

        int arg = 1;

        if (arg < argc && _tcscmp(argv[arg], _T("-conf")) == 0)
        {
            ++arg;
            sConf = argv[arg];
            bDefaultConf = false;
            ++arg;
        }

        if (arg < argc
            && (_tcscmp(argv[arg], _T("dir")) == 0
            || _tcscmp(argv[arg], _T("echo")) == 0
            || _tcscmp(argv[arg], _T("copy")) == 0
            || _tcscmp(argv[arg], _T("del")) == 0
            || _tcscmp(argv[arg], _T("move")) == 0
            || _tcscmp(argv[arg], _T("type")) == 0))
            sCmdLine += _T("cmd /c ");

        if (bDefaultConf && arg < argc)
            FindConf(sConf, argv[arg]);

        for (; arg < argc; ++arg)
        {
            if (!sCmdLine.empty())
                sCmdLine += _T(' ');

            bool hasSpaces = _tcschr(argv[arg], _T(' ')) != nullptr;
            if (hasSpaces)
                sCmdLine += _T('\"');
            sCmdLine += argv[arg];
            if (hasSpaces)
                sCmdLine += _T('\"');
        }

        if (sCmdLine.empty())
            DisplayAboutMessage(NULL);
        else
            ColorizeProcess(hStdOut, csbi.wAttributes, sConf.c_str(), sCmdLine);
    }
    catch (const std::exception& ex)
    {
        printf("Exception: %s.\n", ex.what());
    }
    catch (const WinError& ex)
    {
        _tprintf(_T("WinError: %s.\n"), ex.what());
    }
    catch (...)
    {
        _tprintf(_T("Unknown exception.\n"));
    }

    SetConsoleTextAttribute(hStdOut, csbi.wAttributes);

    return 0;
}
Exemple #2
0
int wmain(int argc, const wchar_t* argv[])
{
    try
    {
        if (argc < 2)
        {
            DisplayAboutMessage(NULL);
            DisplayResource(NULL, IDR_TEXT);
            return 1;
        }

        _locale_t l = _create_locale(LC_ALL, "C");

        FileInfo fileInfo(argv[1]);
        std::vector<wchar_t> chars;
        if (fileInfo.exists)
            chars = fileInfo.load(l);

        HWND hWnd = GetConsoleWindow();
        HICON hIcon = (HICON) SendMessage(hWnd, WM_GETICON, ICON_SMALL, 0);
        SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON)));

        const Screen screenOrig;
        AutoRestoreBufferInfo arbi(screenOrig.hOut);
        AutoRestoreMode armIn(screenOrig.hIn, ENABLE_EXTENDED_FLAGS | ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT, 0xFFFF);
        AutoRestoreMode armOut(screenOrig.hOut, 0, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);

        Screen screen(screenOrig);
        screen.hOut = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CONSOLE_TEXTMODE_BUFFER, nullptr);

        HKEY hKey = NULL;
        RegOpenKey(HKEY_CURRENT_USER, L"SOFTWARE\\RadSoft\\ConEdit", &hKey);

        CONSOLE_SCREEN_BUFFER_INFOEX csbi = arbi.get();
        csbi.dwSize = GetSize(screen.csbi.srWindow);
        EditScheme scheme(hKey, csbi);

        csbi.wAttributes = 0;
        scheme.get(EditScheme::DEFAULT).apply(csbi.wAttributes);
        SetConsoleScreenBufferInfoEx(screen.hOut, &csbi);

        AutoRestoreActiveScreenBuffer arasb(screenOrig.hOut, screen.hOut);

        ModeConEdit mce(hKey, fileInfo, GetSize(screen.csbi.srWindow), chars, l);

        RegCloseKey(hKey);
        hKey = NULL;

        DoMode(mce, screen, scheme);

        SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);

        _free_locale(l);

        return 0;
    }
    catch (const std::exception& e)
    {
        printf(e.what());
        printf("\n");
        return 1;
    }
}