PDA

Visualizza la versione completa : [C] Applicazione Console a schermo intero (full screen)


pgnvni
02-11-2006, 19:00
Ho un programma in C che gira da console!

Voglio fare in modo che quando lo avvio diventa a schermo pieno(simile a quando si preme ALT + INVIO)

come si fa??? C'è qualche funzione in C???

un grazie anticipato

oregon
02-11-2006, 19:32
Ecco un modo un po' articolato ...



#include <windows.h>

#define CONSOLE_FULLSCREEN_MODE 1
typedef BOOL (WINAPI *SETCONSOLEDISPLAYMODE) (HANDLE, DWORD, PCOORD);
SETCONSOLEDISPLAYMODE SetConsoleDisplayMode;

int main(void)
{
HMODULE kernel32 = GetModuleHandle("kernel32.dll");
SetConsoleDisplayMode = reinterpret_cast<SETCONSOLEDISPLAYMODE>(GetProcAddress(kernel32,"SetConsoleDisplayMode"));

HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

COORD cBDim;
SetConsoleDisplayMode(hConsoleOutput, CONSOLE_FULLSCREEN_MODE, &cBDim);

// ...

return(0);
}

MItaly
02-11-2006, 20:27
Io con la GetProcAddress ho sempre usato un normale cast... che vantaggi ci sono ad usare un reinterpret_cast in questa occasione?

andbin
02-11-2006, 21:13
Da notare alcune cose: intanto SetConsoleDisplayMode è supportata solo da Windows XP in poi (è documentato su MSDN).
Inoltre bisogna vedere se nell'SDK (tra gli include) è dichiarata o meno. Sul mio Platform SDK (che non è super-aggiornato ma neanche vecchissimo) non c'è.
Deduco che al momento l'unico modo possibile di utilizzo è tramote il caricamento dinamico.

MItaly
02-11-2006, 21:30
Altra possibilità... usare qualche sporca API che simuli la pressione di ALT+INVIO... :)

alka
02-11-2006, 21:50
Originariamente inviato da pgnvni
Ho un programma in C che gira da console!
Il linguaggio va indicato anche nel titolo, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Questo l'ho corretto io.

oregon
03-11-2006, 00:50
Originariamente inviato da MItaly
Altra possibilità... usare qualche sporca API che simuli la pressione di ALT+INVIO... :)

Certo ... ovviamente c'e' sempre la keybd_event ... ma era per usare le apposite funzionalita' di gestione Console ... (che sì, sono per XP ...). Si può sempre scrivere



keybd_event(VK_MENU, 0x38, 0, 0);
keybd_event(VK_RETURN, 0x1C, 0, 0);
keybd_event(VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0);


P.S. Per il casting non ci sono particolari motivazioni ...

pgnvni
03-11-2006, 08:53
grazie per il codice oregon quello di sopra non mi funzionava mentre questo è andato tutto liscio! :zizi:

oregon
03-11-2006, 13:56
Originariamente inviato da pgnvni
grazie per il codice oregon quello di sopra non mi funzionava mentre questo è andato tutto liscio! :zizi:

Ok ... ma anche il primo funzionava ... :D

XWolverineX
03-11-2006, 15:06
Originariamente inviato da oregon
Ecco un modo un po' articolato ...



#include <windows.h>

#define CONSOLE_FULLSCREEN_MODE 1
typedef BOOL (WINAPI *SETCONSOLEDISPLAYMODE) (HANDLE, DWORD, PCOORD);
SETCONSOLEDISPLAYMODE SetConsoleDisplayMode;

int main(void)
{
HMODULE kernel32 = GetModuleHandle("kernel32.dll");
SetConsoleDisplayMode = reinterpret_cast<SETCONSOLEDISPLAYMODE>(GetProcAddress(kernel32,"SetConsoleDisplayMode"));

HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

COORD cBDim;
SetConsoleDisplayMode(hConsoleOutput, CONSOLE_FULLSCREEN_MODE, &cBDim);

// ...

return(0);
}


Portresti spiegare il codice?
Dunque prendi la libreria con GetModuleHandle (perchè questa funzione e non LoadLibrary? kernel32 è già caricato?)
typedef BOOL (WINAPI *SETCONSOLEDISPLAYMODE) (HANDLE, DWORD, PCOORD);
Non riesco a capire, è un typedef di un puntatore a funzione ma come funzionano questi ultimi?
Cosa è getstdhandle?

Loading