PDA

Visualizza la versione completa : [C++] Massimizzare finestra prompt dei comandi


m4l13n
05-11-2010, 22:51
Ho fatto qualche ricerca ma non ve n'è la minima traccia.
Non mi è strettamente necessaria, ma era una curiosità...

Vorrei massimizzare la finestra del prompt dei comandi di un programma C++. CHe ne dite?

MItaly
05-11-2010, 23:07
Sicuramente non c'è una via multipiattaforma, forse usando qualche trucco strano ce la puoi fare su Windows, molto difficilmente su Linux (anche trovassi un trucco strano che va con un emulatore di terminale, molto probabilmente non andrebbe con gli altri).

Tieni conto comunque che è "concettualmente" sbagliata come azione da parte di una applicazione console, che di base dovrebbe starsene confinata nella console ad essa assegnata e non cercare di fare cose strane all'esterno. Se iniziano a servire questo genere di finezze, forse è il caso di passare ad un'applicazione GUI. :)

m4l13n
05-11-2010, 23:23
Come ho detto era solo una curiosità... Non me ne faccio assolutamente nulla...

MdE2005
06-11-2010, 12:53
Originariamente inviato da MItaly
Sicuramente non c'è una via multipiattaforma, forse usando qualche trucco strano ce la puoi fare su Windows, molto difficilmente su Linux (anche trovassi un trucco strano che va con un emulatore di terminale, molto probabilmente non andrebbe con gli altri).

Tieni conto comunque che è "concettualmente" sbagliata come azione da parte di una applicazione console, che di base dovrebbe starsene confinata nella console ad essa assegnata e non cercare di fare cose strane all'esterno. Se iniziano a servire questo genere di finezze, forse è il caso di passare ad un'applicazione GUI. :)

Concordio in pieno..


In realtà per Windows esistono dei trucchetti più o meno efficaci:

1. simulare la pressione di ALT+ENTER


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);

tuttavia non è supportato in Windows Vista.

2. uso dell'API SetConsoleDisplayMode


Se sei veramente interessato ti posso scrivere anche il codice del 2° esempio.



Ciao :)

m4l13n
06-11-2010, 17:12
Se non ti crea disturbo va bene... Grazie!

kirakira93
06-11-2010, 18:36
Io so che con le versioni dei common control 6.0 (windows vista e windows 7), windows non supporta la modalità schermo intero per il prompt...

MdE2005
08-11-2010, 20:43
Originariamente inviato da kirakira93
Io so che con le versioni dei common control 6.0 (windows vista e windows 7), windows non supporta la modalità schermo intero per il prompt...

Hai ragione, come ho già specificato nel mio precedente post..

Per rispondere alla richiesta di m4l13n scrivo il codice che sfrutta la funzione API SetConsoleDisplayMode :


BOOL NT_SetConsoleDisplayMode(HANDLE hOutputHandle, DWORD dwNewMode)
{
typedef BOOL (WINAPI *SCDMProc_t) (HANDLE, DWORD, LPDWORD);

SCDMProc_t SetConsoleDisplayMode;
HMODULE hKernel32;
BOOL bFreeLib = FALSE, ret;
const char KERNEL32_NAME[] = "kernel32.dll";
hKernel32 = GetModuleHandleA(KERNEL32_NAME);
if (hKernel32 == NULL)
{
hKernel32 = LoadLibraryA(KERNEL32_NAME);
if (hKernel32 == NULL)
return FALSE;
bFreeLib = true;
}
SetConsoleDisplayMode = (SCDMProc_t)GetProcAddress(hKernel32, "SetConsoleDisplayMode");
if (SetConsoleDisplayMode == NULL)
{
ret = FALSE;
}
else
{
ret = SetConsoleDisplayMode(hOutputHandle, dwNewMode, &tmp);
}
if (bFreeLib)
FreeLibrary(hKernel32);
return ret;
}

//e ovviamente si usa così:

NT_SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), 1 );



Ciao :)

m4l13n
08-11-2010, 20:46
Un po' complicatuccio per la mia modesta conoscenza ma grazie comunque!

m4l13n
08-11-2010, 20:52
L'ho provato ma da errore alla linea 24 (le ho contate a mano potrei sbagliarmi).
Questa in pratica:

ret = SetConsoleDisplayMode(hOutputHandle, dwNewMode, &tmp);
Identificatore non dichiarato: tmp

MdE2005
08-11-2010, 21:10
Come puoi vedere dalla documentazione MSDN (http://msdn.microsoft.com/en-us/library/ms686028(VS.85).aspx), il 3° argomento della funzione è optional per cui o lo elimini dalla funzione (cosa che io non ho fatto) oppure lo utilizzi.
Sempre guardando la documentazione ti accorgi che tale argomento è un puntatore ad una struttura COORD, che può essere così utilizzata:


COORD coord;
coord.X = 0;
coord.Y = 20;


Purtroppo non ho l'IDE in questo PC e quindi rispondo "a memoria"..


Ciao :)

Loading