On-line: MIKHAIL, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 475
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 14.09.08 16:59. Заголовок: Как переключить консоль в полный экран и обратно (или наоборот) ?


Например, с помощью вот такой функции:
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


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]


постоянный участник


Пост N: 1137
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 23.03.13 18:56. Заголовок: заменить на HB_ISBYR..


заменить на HB_ISBYREF

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2866
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.03.13 18:58. Заголовок: Петр пишет: заменит..


Петр пишет:

 цитата:
заменить на HB_ISBYREF


Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2889
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.03.13 21:57. Заголовок: Петр Перелез на Min..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1140
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 26.03.13 22:45. Заголовок: Dima пишет: Как бы ..


Dima пишет:

 цитата:
Как бы так корректно написать небольшую функцию на С не изобретая велосипед ?


Что эта функция должна делать? И что значит корректно?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2890
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.03.13 23:37. Заголовок: Петр пишет: Что эта..


Петр пишет:

 цитата:
Что эта функция должна делать?


Тоже самое но без вызова kernel32



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1141
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.03.13 01:07. Заголовок: #pragma BEGINDUMP ..



 цитата:
#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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1142
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.03.13 01:10. Заголовок: PROCEDURE main L..


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.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2891
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.03.13 10:49. Заголовок: Петр :sm36: ..


Петр


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 224
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет