(svn r6420) -Feature [Win32]: Use an existing console if openttd was started from one.
authorDarkvater
Thu, 07 Sep 2006 21:52:21 +0000
changeset 4571 4194aa48c9cd
parent 4570 61a551bc82ef
child 4572 e6e17d286de7
(svn r6420) -Feature [Win32]: Use an existing console if openttd was started from one.
Unfortunately this only works for WindowsXP or higher, all older MS-OS's
are stuck with the old behaviour.
win32.c
--- 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);