changeset 4571:2dcc4802b1e9 draft

(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.
author Darkvater <Darkvater@openttd.org>
date Thu, 07 Sep 2006 21:52:21 +0000
parents c4ed5229b09c
children 9d022d3e93cd
files win32.c
diffstat 1 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/win32.c
+++ b/win32.c
@@ -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);