Konsolenanwendung als Vollbild unter XP?

Radhad

Erfahrenes Mitglied
Hallo Leute!

Wie oben aus der Frage zu lesen ist würde ich gerne eine Konsolenanwendung im Vollbildmodus laufen lassen. Dabei Frage ich mich allerdings, ob es mit wenig aufwand nötig ist oder ob man dafür Direct3D / OpenGL verwenden müsste...


MfG Radhad
 
Alt-Enter schaltet um in Vollbild. Ob das auch programmtechnisch geht, weiss ich nicht, nehme es aber an. Da müsste ich mal suchen.
 
Das Beste, was ich zustandegebracht habe ist Folgendes:
Code:
#include <windows.h>

...

  char title[500];
  GetConsoleTitle( title, 500 );
  HWND hwnd = FindWindow( "ConsoleWindowClass", title );
  SendMessage( hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );

Das sucht das Konsolenfenster (wird aber auch andere Konsolenfenster finden!) und schickt ihm ein Maximize. Das ist allerdings nicht ganz das, was du suchst. Ob es möglich ist, dem Konsolenfesnter auf diese Weisse auch ein Alt+Enter unterzujubeln, weiss ich nicht. Jedenfalls verhalten sich Konsolenfenster nicht wie übliche Windows. Spy++ weigert ebenfalls, die Fensternachrichten zu loggen, sonst wäre ich weitergekommen.

Hier habe ich noch etwas zu diesem Ansatz entdeckt: Klick

Es gibt übrigens noch die Möglichkeit, in der Registry einzustellen, ob Konsolenfenster maximiert geöffnet werden sollen.
 
Zuletzt bearbeitet:
Ich hab mal deinen Ansatz etwas weitergeführt bzw von deinem Link übernommen:

Code:
void Maxi()
{
   static LPCTSTR temptitle = "{98C1C303-2A9E-11d4-9FF5-006067718D04}";
   TCHAR title[512];
   if(GetConsoleTitle(title, sizeof(title)/sizeof(TCHAR)) == 0)
      cout << "Fehler\n";
   SetConsoleTitle(temptitle);
   HWND wnd = FindWindow(NULL, temptitle);
   SetConsoleTitle(title);
   SendMessage(wnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}
temptitle sollte man außerdem mit einer eigenen GUID (http://www.aboutvb.de/dow/dowfile.php?dl&guidgensetup.zip) initialisieren.
EDIT: besserer Link :-)
 
Zuletzt bearbeitet:
Das ist schon ein hartes Stück Arbeit denke ich .. Ich danke Euch für die Mühen, vielleicht kennt ja noch wer eine Lösung.

Aber ich muss sagen, so ist das auch schon nicht schlecht. Leider geht es nicht breiter ...


MfG Radhad
 
Zuletzt bearbeitet:
Ich habe hier auf einer Seite mal was dazu gefunden und hänge den Quelltext (C) mal hier rein:
Code:
#include <windows.h>
#include <stdio.h>
#include <conio.h>

// prototypes
BOOL FullScreenConsole9x(void);
BOOL FullScreenConsoleNT(void);

// ---------------------------------------------------------------------------
BOOL FullScreenConsole9x(void)
{
    BOOL ok = FALSE;

	// console finding guid
	// a unique number to identify this console - replace this with your own
	#define CON_GUID TEXT("CON_GUID-{68E311EF-BF32-4b0f-8D35-E84E4A463096}")

	// hwnd for console window
	HWND hConWnd = NULL;

    // magic command
    WPARAM magic = 57359;

	// buffer for storing a substitute title
	TCHAR szTempTitle[] = CON_GUID;

	// buffer for storing current console title
	TCHAR szTempString[MAX_PATH];

	// obtain the current console title
	if( GetConsoleTitle(szTempString, sizeof(szTempString)/sizeof(TCHAR) ) )
	{
		// replace the current title with substitute title
		SetConsoleTitle(szTempTitle);

		// give it a chance to set in
		Sleep(50);

		// locate the console window

		// console window class on W9x is "tty"
		hConWnd = FindWindow(TEXT("tty"), szTempTitle);

		// restore the original console title
		SetConsoleTitle(szTempString);

	}

	// verify the console hwnd
	if ( hConWnd != NULL ) {

	    // pause before changing to fullscreen
    	Sleep(450);

        // this method works by faking a keyboard command
        SendMessage(hConWnd,WM_COMMAND,magic,0);

        ok = TRUE;

	}

    return ok;

}

// ---------------------------------------------------------------------------
BOOL FullScreenConsoleNT(void)
{
    // typedef function pointer for undocumented API
    typedef BOOL WINAPI (*SetConsoleDisplayModeT)(HANDLE,DWORD,DWORD*);

    // declare one such function pointer
    SetConsoleDisplayModeT SetConsoleDisplayMode;

	// load kernel32.dll
	HINSTANCE hLib = LoadLibrary("KERNEL32.DLL");
    if ( hLib == NULL ) {
        // highly unlikely but good practice just the same
        return FALSE;
    }

	// assign procedure address to function pointer
	SetConsoleDisplayMode = ( SetConsoleDisplayModeT )
		GetProcAddress(hLib,"SetConsoleDisplayMode");

	// check if the function pointer is valid
    // since the function is undocumented
	if ( SetConsoleDisplayMode == NULL ) {
        // play nice with windows
	    FreeLibrary(hLib);
		return FALSE;
	}

	DWORD newmode = 1;	// fullscreen mode
	DWORD oldmode;

	// get handle to stdout
	HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

	// pause before changing to fullscreen
	Sleep(500);

	// set full screen mode
	SetConsoleDisplayMode(hStdOut,newmode,&oldmode);

    // play nice with windows
	FreeLibrary(hLib);

    return TRUE;

}

// ---------------------------------------------------------------------------
int main(void)
{

    OSVERSIONINFO VerInfo;
    ZeroMemory(&VerInfo,sizeof(VerInfo));
    VerInfo.dwOSVersionInfoSize = sizeof(VerInfo);
    GetVersionEx(&VerInfo);

	// Why a switch? because I felt like switching... har har
    switch ( VerInfo.dwPlatformId ) {

		case VER_PLATFORM_WIN32_NT :
        	FullScreenConsoleNT();
			break;

		case VER_PLATFORM_WIN32_WINDOWS	:
        	FullScreenConsole9x();
			break;

		default:
			break;

    }

	// issue a report
	printf("This is a test.\nHit enter to exit");

	// wait for keyboard hit
	getch();

    return 0;

}
Das Programm wurde für den LCCwin32 geschrieben, funktioniert aber auch mit dem Dev-C++!

Gruß
René
 
Zurück