Форум » [x]Harbour » Как переключить консоль в полный экран и обратно (или наоборот) ? » Ответить

Как переключить консоль в полный экран и обратно (или наоборот) ?

Петр: Например, с помощью вот такой функции: SetConsoleDisplayMode( nOutHandle, nConsoleMode ) -> nSuccess где nOutHandle - дескриптор консоли вывода, как правило получаем с помощью стандартной [x]Harbour функции Hb_GetStdOut(); nConsoleMode - запрашиваемый режим отображения консоли, может принимать значения CONSOLE_WINDOWMODE или CONSOLE_FULLSCREEN (наверное и другие тоже {:)) CONSOLE_WINDOWMODE - оконный режим (отображение в окне); CONSOLE_FULLSCREEN - полноэкранный режим (отображение во весь экран). Функция возвращает: 0 - в случае успеха, т.е. запрашиваемый режим консоли успешно установлен; 1 - запрашиваемый режим консоли не может быть установлен. Здесь возможны два варианта - или запрашиваемый режим уже установлен и вы пытаетесь его установить повторно, или такой режим работы не поддерживается. -1 - скорее всего ваша ОС не поддерживает возможность переключения режима отображения консоли. Примечание: GTWIN only, Windows NT/2000/XP only {:(. Функция использует недокументированную одноименную функцию BOOL SetConsoleDisplayMode ( HANDLE hOut, // standard output handle DWORD dwNewMode, // specifies the display mode LPDWORD lpdwOldMode // address of variable for previous value of display mode ), экспортируемую из kernel32.dll (не содержится в kernel32.lib!). Тестировано с Harbour 1.0 + BCC582, VC7; WinXP HE SP2, WinXP PRO SP1, SP2 #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" static HANDLE DosToWinHandle( HB_FHANDLE fHandle ); static HANDLE DosToWinHandle( HB_FHANDLE fHandle ) /* from filesys.c */ { if( fHandle == ( HB_FHANDLE ) 0 ) return GetStdHandle( STD_INPUT_HANDLE ); else if( fHandle == ( HB_FHANDLE ) 1 ) return GetStdHandle( STD_OUTPUT_HANDLE ); else if( fHandle == ( HB_FHANDLE ) 2 ) return GetStdHandle( STD_ERROR_HANDLE) ; else return ( HANDLE ) fHandle; } typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD); HB_FUNC ( SETCONSOLEDISPLAYMODE ) { PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode; HMODULE hKernel32 = GetModuleHandle("kernel32"); if ( hKernel32 != NULL ) SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODE) GetProcAddress( hKernel32, "SetConsoleDisplayMode" ); if ( SetConsoleDisplayMode != NULL ) { DWORD dwOldMode; HANDLE hOut = DosToWinHandle( (HB_FHANDLE) hb_parnint(1) ); hb_retni( SetConsoleDisplayMode( hOut, (DWORD) hb_parnl(2), &dwOldMode) ? (INT) 0 : (INT) 1 ); if ( hb_pcount() > 2 && ISBYREF(3) ) { hb_stornl( (LONG) dwOldMode, 3 ); } } else hb_retni( (INT) -1 ); } #pragma ENDDUMP

Ответов - 28, стр: 1 2 All

Петр: заменить на HB_ISBYREF

Dima: Петр пишет: заменить на HB_ISBYREF Спасибо

Dima: Петр Перелез на MinGW , смотрю там уже есть SetConsoleDisplayMode в WINCON.H Как бы так корректно написать небольшую функцию на С не изобретая велосипед ? Не поможете ? ;)


Петр: Dima пишет: Как бы так корректно написать небольшую функцию на С не изобретая велосипед ? Что эта функция должна делать? И что значит корректно?

Dima: Петр пишет: Что эта функция должна делать? Тоже самое но без вызова kernel32

Петр: #pragma BEGINDUMP #define _WIN32_WINNT 0x0501 #include "hbwapi.h" HB_FUNC( WAPI_GETCONSOLEDISPLAYMODE ) { DWORD dwModeFlags; hbwapi_ret_L( GetConsoleDisplayMode(&dwModeFlags) ); hbwapi_SetLastError( GetLastError() ); hb_stornint( dwModeFlags, 1 ); } HB_FUNC( WAPI_SETCONSOLEDISPLAYMODE ) { HANDLE hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE ); COORD BuffDim; hbwapi_ret_L( SetConsoleDisplayMode(hConsoleOutput, hbwapi_par_DWORD(2), &BuffDim) ); hbwapi_SetLastError( GetLastError() ); if ( hb_pcount() > 2 && HB_ISBYREF(3) ) { hb_storvni( BuffDim.X, 3, 1 ); hb_storvni( BuffDim.Y, 3, 2 ); } } #pragma ENDDUMP

Петр: PROCEDURE main LOCAL nModeFlags := 3, aBuffDim := {,} CLS ? wapi_GetConsoleDisplayMode( @nModeFlags ) ? nModeFlags ? wapi_SetConsoleDisplayMode( , 1, @aBuffDim ) ? aBuffDim[1], aBuffDim[2] ? wapi_GetLastError() ? wapi_GetConsoleDisplayMode( @nModeFlags ) ? nModeFlags WAIT "TEST" RETURN Требуется подключение библиотеки hbwin.

Dima: Петр



полная версия страницы