Alt+Enter

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 19 ноя 2004.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Ну вот кажется все, прощай водка (aka перцовка, горилка...)



    Как програмно консольное окошко в full-screen включить? Тоесть то, что при Alt+Enter случается?
     
  2. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Господи... Basic это кощунство :)



    Вот такая хрень:


    Код (Text):
    1.  
    2. #include <windows.h>
    3. void main(void)
    4. {
    5.   COORD coord;
    6.   coord.X=80;
    7.   coord.Y=25;
    8.   SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE),CONSOLE_FULLSCREEN_MODE,&coord);
    9. }
    10.  


    Работать не хочет :dntknw: В MSDN сказано, что такая функция есть, а VC.NET 2003 говорит, что нет :dntknw: Даже после прописания #define _WIN32_WINNT 0x0501 в windows.h :dntknw: Да и в MSDN сказано, что работает только начиная с WinXP.



    Нет линка на сорец на нормальном языке?
     
  4. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    При чем здесь язык? Суть - в использовании недокументированной SetConsoleDisplayMode. В MSDN написано, что она реализована с XP, но на моей w2ksp4 она есть. Потому и считается недокументированной. Не хочешь - шли Alt-Enter окну.

    --

    Приаттачь свой исходник, если не сложно. Проверю у себя
     
  5. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    Вот такое у меня работает:
    Код (Text):
    1.  
    2. #include "stdafx.h"
    3. #include <windows.h>
    4.  
    5. typedef UINT (CALLBACK* SCDM)(void*,DWORD,_COORD*);
    6. SCDM SetConsoleDisplayMode;
    7. void main(void)
    8. {
    9.   COORD coord;
    10.   coord.X=80;
    11.   coord.Y=25;
    12.   HMODULE lib=LoadLibrary("kernel32.dll");
    13.  SetConsoleDisplayMode = (SCDM)GetProcAddress(lib,"SetConsoleDisplayMode");
    14.  SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE),1,&coord);
    15.   //SetConsoleDisplayMode();
    16. };
    17.  
     
  6. Volynkin

    Volynkin New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2004
    Сообщения:
    30
    _DEN_



    Вот этот код не пробовал? У меня сейчас машина с win2k занята... позже проверю.



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

    A>

    (c)1999 Ashot Oganesyan K, SmartLine, Inc mailto:ashot@aha.ru



    Когда Вы запускаете свое приложение в консольном окне Вы можете

    нажать ALT+ENTER для переключения консоли в полный экран.Но нет

    документированных функций,чтобы сделать это.Однако Windows9X посылает

    сообщение WM_COMMAND со специальным идентификатором,когда пользователь

    нажимает ALT+ENTER:



    #define ID_SWITCH_CONSOLEMODE 0xE00F



    Для переключения режимов Вы можете использовать ф-ию SendMessage:



    SendMessage(hWnd,WM_COMMAND,ID_SWITCH_CONSOLEMODE,0);



    Однако это не работает в Windows NT/2000.

    Windows NT/2000 содержит две недокументированные функции,которые

    позволяют нам добраться до консольного окна:



    BOOL SetConsoleDisplayMode (

    HANDLE hOut, // standard output handle

    DWORD dwNewMode, // specifies the display mode

    LPDWORD lpdwOldMode, // address of variable for previous value of display mode

    );



    BOOL GetConsoleDisplayMode (

    LPDWORD lpdwMode, // address of variable for current value of display mode

    );



    Эти функции экспортируются Kernel32.dll, но Kernel32.lib их не содержит.

    Поэтому мы вынуждены использовать функцию GetProcAddress:



    typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD);

    typedef BOOL (WINAPI *PROCGETCONSOLEDISPLAYMODE)(LPDWORD);



    PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode;

    PROCGETCONSOLEDISPLAYMODE GetConsoleDisplayMode;



    HMODULE hKernel32 = GetModuleHandle("kernel32");



    SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODEELLWND)

    GetProcAddress(hKernel32,"SetConsoleDisplayMode");



    GetConsoleDisplayModeplayMode = (PROCGETCONSOLEDISPLAYMODE)

    GetProcAddress(hKernel32,"GetConsoleDisplayMode");



    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);



    DWORD dwOldMode;

    SetConsoleDisplayMode(hOut,1,&dwOldMode);