void _wprintf(LPCWSTR asBuffer) { if (!asBuffer) return; int nAllLen = lstrlenW(asBuffer); HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD dwWritten = 0; if (!IsOutputRedirected()) { WriteConsoleW(hOut, asBuffer, nAllLen, &dwWritten, 0); } else { UINT cp = GetConsoleOutputCP(); int cchMax = WideCharToMultiByte(cp, 0, asBuffer, -1, NULL, 0, NULL, NULL) + 1; char* pszOem = (cchMax > 1) ? (char*)malloc(cchMax) : NULL; if (pszOem) { int nWrite = WideCharToMultiByte(cp, 0, asBuffer, -1, pszOem, cchMax, NULL, NULL); if (nWrite > 1) { // Don't write terminating '\0' to redirected output WriteFile(hOut, pszOem, nWrite-1, &dwWritten, 0); } free(pszOem); } } }
bool DoStateCheck(ConEmuStateCheck eStateCheck) { LogFunction(L"DoStateCheck"); bool bOn = false; switch (eStateCheck) { case ec_IsConEmu: case ec_IsAnsi: if (ghConWnd) { CESERVER_CONSOLE_MAPPING_HDR* pInfo = (CESERVER_CONSOLE_MAPPING_HDR*)malloc(sizeof(*pInfo)); if (pInfo && LoadSrvMapping(ghConWnd, *pInfo)) { _ASSERTE(pInfo->ComSpec.ConEmuExeDir[0] && pInfo->ComSpec.ConEmuBaseDir[0]); HWND hWnd = pInfo->hConEmuWndDc; if (hWnd && IsWindow(hWnd)) { switch (eStateCheck) { case ec_IsConEmu: bOn = true; break; case ec_IsAnsi: bOn = ((pInfo->Flags & CECF_ProcessAnsi) != 0); break; default: ; } } } SafeFree(pInfo); } break; case ec_IsAdmin: bOn = IsUserAdmin(); break; case ec_IsRedirect: bOn = IsOutputRedirected(); break; case ec_IsTerm: bOn = isTerminalMode(); break; default: _ASSERTE(FALSE && "Unsupported StateCheck code"); } return bOn; }
void _printf(LPCSTR asBuffer) { if (!asBuffer) return; int nAllLen = lstrlenA(asBuffer); HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD dwWritten = 0; if (!IsOutputRedirected()) { WriteConsoleA(hOut, asBuffer, nAllLen, &dwWritten, 0); } else { WriteFile(hOut, asBuffer, nAllLen, &dwWritten, 0); } }