Что нового

[Окна, Диалоги] Выход из полноэкранного режима

Dellroc

Осваивающий
Сообщения
151
Репутация
32
Подскажите как сделать выход из полноэкранного приложения (игрушки) в окнный принудительно? Желательно через WinAPI.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Dellroc [?]
Через Send не вариант
Ну, вот через WinAPI
Код:
#include <WinAPISys.au3>
_WinAPI_Keybd_Event(0x5B, 0) ; "Left Windows key" нажать
_WinAPI_Keybd_Event(0x5B, 2) ; "Left Windows key" отпустить
В чём разница?
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
32
Это всё равно эмуляция нажатий.... Вот есть пример, но я его не осилю переложить на автоит
Код:
WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) };

void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags)
{
  DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
  if (dwStyle & WS_OVERLAPPEDWINDOW) {
    MONITORINFO mi = { sizeof(mi) };
    if (GetWindowPlacement(hwnd, &g_wpPrev) &&
        GetMonitorInfo(MonitorFromWindow(hwnd,
                       MONITOR_DEFAULTTOPRIMARY), &mi)) {
      SetWindowLong(hwnd, GWL_STYLE,
                    dwStyle & ~WS_OVERLAPPEDWINDOW);
      SetWindowPos(hwnd, HWND_TOP,
                   mi.rcMonitor.left, mi.rcMonitor.top,
                   mi.rcMonitor.right - mi.rcMonitor.left,
                   mi.rcMonitor.bottom - mi.rcMonitor.top,
                   SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
    }
  } else {
    SetWindowLong(hwnd, GWL_STYLE,
                  dwStyle | WS_OVERLAPPEDWINDOW);
    SetWindowPlacement(hwnd, &g_wpPrev);
    SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
                 SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
                 SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
  }
}

// add to WndProc
    HANDLE_MSG(hwnd, WM_LBUTTONUP, OnLButtonUp);
и вот
Код:
#include <windows.h>
 
HINSTANCE hInst;
HWND hWnd;
MSG msg;
WNDCLASSEX wc;
bool FullScreen = false;
WINDOWPLACEMENT wpc;
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)
{    
    switch(Message)
    {
    case WM_KEYDOWN:
        if(wParam == VK_SPACE)
        {
            if(!FullScreen)//Из оконного во весь экран
    {
                GetWindowPlacement(hWnd,&wpc);//Сохраняем параметры оконного режима
                SetWindowLong(hWnd,GWL_STYLE,WS_POPUP);//Устанавливаем новые стили
                SetWindowLong(hWnd,GWL_EXSTYLE,WS_EX_TOPMOST);
                ShowWindow(hWnd,SW_SHOWMAXIMIZED);//Окно во весь экран
         FullScreen = true;
    }
    else//Из всего эранна в оконное
    {     
        SetWindowLong(hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW|WS_VISIBLE);//Устанавливаем стили окнного режима
        SetWindowLong(hWnd,GWL_EXSTYLE,0L);
        SetWindowPlacement(hWnd,&wpc);//Загружаем парметры предыдущего оконного режима
               ShowWindow(hWnd,SW_SHOWDEFAULT);//Показываем обычное окно
        FullScreen = false;
    }
        }
        return 0; 
        break;
        case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam, lParam);
}
 
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
    hInst=GetModuleHandle(NULL);
    wc.cbSize=sizeof(WNDCLASSEX);
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground = NULL;
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "PPC";
    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Cant register window!", "Error!", MB_OK);
        return 0;
    }
    DWORD Style;
    if(!FullScreen)
        Style = WS_OVERLAPPEDWINDOW |WS_VISIBLE;
    else
        Style = WS_POPUP | WS_EX_TOPMOST;
    hWnd = CreateWindow("PPC", "Sample", Style, 0, 0, 
        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);
    if(!hWnd)
    {
        MessageBox(NULL, "Cant create window!", "Error!", MB_OK);
        return 0;
     }
     ShowWindow(hWnd, SW_SHOWDEFAULT);
     UpdateWindow(hWnd);
     ZeroMemory(&msg, sizeof(msg));
     while(msg.message!=WM_QUIT)
     {
          if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
        TranslateMessage(&msg);
         DispatchMessage(&msg);
    }
    }
    UnregisterClass( "PPC", wc.hInstance );
    return 0;
}
Как альтернатива - может можно как-то запустить принудительно в оконном режиме?
 
Верх