win32.c
changeset 4571 4194aa48c9cd
parent 4370 c7bd128b1670
child 4572 e6e17d286de7
--- a/win32.c	Thu Sep 07 18:36:37 2006 +0000
+++ b/win32.c	Thu Sep 07 21:52:21 2006 +0000
@@ -786,16 +786,27 @@
 	return n;
 }
 
+#ifndef ATTACH_PARENT_PROCESS
+#define ATTACH_PARENT_PROCESS ((DWORD)-1)
+#endif
+
 void CreateConsole(void)
 {
 	HANDLE hand;
 	CONSOLE_SCREEN_BUFFER_INFO coninfo;
+	BOOL (WINAPI *AttachConsole)(DWORD);
 
 	if (_has_console) return;
 
 	_has_console = true;
 
-	AllocConsole();
+	/* Attach to an existing console if one exists. Unfortunately this function
+	 * only exists on WindowsXP or higher, so for all other users out there:
+	 * you're stuck with an additional console even if you started openttd from
+	 * the command line */
+	if (!LoadLibraryList((Function*)&AttachConsole, "kernel32.dll\0AttachConsole\0") ||
+		  !AttachConsole(ATTACH_PARENT_PROCESS))
+		AllocConsole();
 
 	hand = GetStdHandle(STD_OUTPUT_HANDLE);
 	GetConsoleScreenBufferInfo(hand, &coninfo);