From 0e0f63fe0df49883cb1080732555452e8e5bd7b8 Mon Sep 17 00:00:00 2001 From: lordmulder Date: Fri, 4 Mar 2011 23:40:09 +0100 Subject: [PATCH] Output log messages as debug strings, if no console is attached. --- src/Config.h | 2 +- src/Global.cpp | 109 +++++++++++++++++++++++++++++++++---------------- src/Main.cpp | 9 ++++ 3 files changed, 84 insertions(+), 36 deletions(-) diff --git a/src/Config.h b/src/Config.h index 74d64737..a82f7848 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,7 +25,7 @@ #define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 1 -#define VER_LAMEXP_BUILD 346 +#define VER_LAMEXP_BUILD 349 #define VER_LAMEXP_SUFFIX Beta-5 /* diff --git a/src/Global.cpp b/src/Global.cpp index 94d292bb..c797ee24 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -112,6 +112,9 @@ static QDate g_lamexp_version_date; static const char *g_lamexp_months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; static const char *g_lamexp_version_raw_date = __DATE__; +//Console attached flag +static bool g_lamexp_console_attached = false; + //Compiler version #if _MSC_VER == 1400 static const char *g_lamexp_version_compiler = "MSVC 8.0"; @@ -263,38 +266,63 @@ void lamexp_message_handler(QtMsgType type, const char *msg) if(!hConsole) { - hConsole = CreateFile(L"CONOUT$", GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); - if(hConsole == INVALID_HANDLE_VALUE) hConsole = NULL; + if(g_lamexp_console_attached) + { + hConsole = CreateFile(L"CONOUT$", GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); + if(hConsole == INVALID_HANDLE_VALUE) hConsole = NULL; + } } - CONSOLE_SCREEN_BUFFER_INFO bufferInfo; - GetConsoleScreenBufferInfo(hConsole, &bufferInfo); - SetConsoleOutputCP(CP_UTF8); - - switch(type) + if(hConsole) { - case QtCriticalMsg: - case QtFatalMsg: - fflush(stdout); - fflush(stderr); - SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); - fwprintf(stderr, L"\nGURU MEDITATION !!!\n%S\n\n", msg); - MessageBoxW(NULL, (wchar_t*) QString::fromUtf8(msg).utf16(), L"LameXP - GURU MEDITATION", MB_ICONERROR | MB_TOPMOST | MB_TASKMODAL); - break; - case QtWarningMsg: - SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); - //MessageBoxW(NULL, (wchar_t*) QString::fromUtf8(msg).utf16(), L"LameXP - GURU MEDITATION", MB_ICONWARNING | MB_TOPMOST | MB_TASKMODAL); - fwprintf(stderr, L"%S\n", msg); - fflush(stderr); - break; - default: - SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); - fwprintf(stderr, L"%S\n", msg); - fflush(stderr); - break; - } + CONSOLE_SCREEN_BUFFER_INFO bufferInfo; + GetConsoleScreenBufferInfo(hConsole, &bufferInfo); + SetConsoleOutputCP(CP_UTF8); - SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); + switch(type) + { + case QtCriticalMsg: + case QtFatalMsg: + fflush(stdout); + fflush(stderr); + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); + fwprintf(stderr, L"\nGURU MEDITATION !!!\n%S\n\n", msg); + MessageBoxW(NULL, (wchar_t*) QString::fromUtf8(msg).utf16(), L"LameXP - GURU MEDITATION", MB_ICONERROR | MB_TOPMOST | MB_TASKMODAL); + break; + case QtWarningMsg: + SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); + fwprintf(stderr, L"%S\n", msg); + fflush(stderr); + break; + default: + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); + fwprintf(stderr, L"%S\n", msg); + fflush(stderr); + break; + } + + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); + } + else + { + char temp_buffer[1024]; + + switch(type) + { + case QtCriticalMsg: + case QtFatalMsg: + sprintf_s(temp_buffer, 1024, "[LameXP][C] %s", msg); + break; + case QtWarningMsg: + sprintf_s(temp_buffer, 1024, "[LameXP][W] %s", msg); + break; + default: + sprintf_s(temp_buffer, 1024, "[LameXP][I] %s", msg); + break; + } + + OutputDebugStringA(temp_buffer); + } if(type == QtCriticalMsg || type == QtFatalMsg) { @@ -325,7 +353,12 @@ void lamexp_init_console(int argc, char* argv[]) if(enableConsole) { - if(AllocConsole()) + if(!g_lamexp_console_attached) + { + g_lamexp_console_attached = AllocConsole(); + } + + if(g_lamexp_console_attached) { //------------------------------------------------------------------- //See: http://support.microsoft.com/default.aspx?scid=kb;en-us;105305 @@ -340,13 +373,19 @@ void lamexp_init_console(int argc, char* argv[]) setvbuf(stderr, NULL, _IONBF, 0); } - HMENU hMenu = GetSystemMenu(GetConsoleWindow(), 0); - EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); - RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND); + if(HWND hwndConsole = GetConsoleWindow()) + { + HMENU hMenu = GetSystemMenu(hwndConsole, 0); + EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); + RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND); - SetConsoleCtrlHandler(NULL, TRUE); - SetConsoleTitle(L"LameXP - Audio Encoder Front-End | Debug Console"); - SetConsoleOutputCP(CP_UTF8); + SetWindowLong(hwndConsole, GWL_STYLE, GetWindowLong(hwndConsole, GWL_STYLE) & (~WS_MAXIMIZEBOX)); + SetWindowLong(hwndConsole, GWL_STYLE, GetWindowLong(hwndConsole, GWL_STYLE) & (~WS_MINIMIZEBOX)); + + SetConsoleCtrlHandler(NULL, TRUE); + SetConsoleTitle(L"LameXP - Audio Encoder Front-End | Debug Console"); + SetConsoleOutputCP(CP_UTF8); + } } } diff --git a/src/Main.cpp b/src/Main.cpp index aa277c41..7b4de7b6 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -208,3 +208,12 @@ int main(int argc, char* argv[]) } #endif } + +extern "C" +{ + void __declspec(dllexport) __stdcall Test(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) + { + OutputDebugStringA("Hello cruel world!"); + MessageBoxA(0, lpszCmdLine, "LameXP v9.0", MB_ICONINFORMATION); + } +} \ No newline at end of file