1

Тема: AHK: Альтернатива WinSet

Добрый день!

Интересует альтернативное убирание рамок окна, при использовании:

WinSet, Style, -0xC40000, ahk_exe myGame.exe

Рамки не убираются. Ткните в пример через DllCall.

2

Re: AHK: Альтернатива WinSet

Игры используют нестандартные окна, рамки могут быть просто нарисованными.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: kharlashkin, 2016-09-10 09:21:24)

Re: AHK: Альтернатива WinSet

teadrinker пишет:

Игры используют нестандартные окна, рамки могут быть просто нарисованными.

Да нет, вроде стандартное Windows окно, дело в том что в зависимости от "фазы луны" срабатывает и приведенный код. Вот ищу способ попробовать через DllCall, нашел пример на C/C++. Может кто подскажет как его применить в AHK

4

Re: AHK: Альтернатива WinSet

kharlashkin, не нужно цитировать предыдущий пост. Для начала стоит попробовать обращаться к окну не по ahk_exe, а по названию и/или ahk_class.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Альтернатива WinSet

teadrinker, пробовал - не помогает. И по названию и по процессу и по ahk_class.

6

Re: AHK: Альтернатива WinSet

Gui, +hwndhGui
Gui, Show, w300 h300

Sleep 1000

DeleteBorder(hGui)
Return

DeleteBorder(hwnd)  {
   static GWL_STYLE := -16, GWL_EXSTYLE := -20, WS_CAPTION := 0xC00000, WS_THICKFRAME := 0x40000
        , WS_MINIMIZE := 0x20000000, WS_MAXIMIZE := 0x1000000, WS_SYSMENU := 0x80000
        , WS_EX_DLGMODALFRAME := 0x1, WS_EX_CLIENTEDGE := 0x200, WS_EX_STATICEDGE := 0x20000
   
   lStyle := DllCall("GetWindowLongPtr", Ptr, hwnd, Int, GWL_STYLE, Ptr)
   lExStyle := DllCall("GetWindowLongPtr", Ptr, hwnd, Int, GWL_EXSTYLE, Ptr)
   
   lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)
   lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE)
   
   DllCall("SetWindowLongPtr", Ptr, hwnd, Int, GWL_STYLE, Ptr, lStyle)
   DllCall("SetWindowLongPtr", Ptr, hwnd, Int, GWL_EXSTYLE, Ptr, lExStyle)
   
   WinSet, Redraw,, ahk_id %hwnd%
}

Но на самом деле никакой альтернативы WinSet нет, она использует тот же механизм, все эти стили можно было бы и с помощью WinSet изменить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Альтернатива WinSet

Проверил Вашим кодом и немного модифицированным (чтобы все через dllcall) - ничего не меняется.

LWIN & RButton::
hWnd := WinExist("ahk_exe myGame.exe")
DeleteBorder(hWnd)
Return

DeleteBorder(hwnd)  {
   static GWL_STYLE := -16, GWL_EXSTYLE := -20, WS_CAPTION := 0xC00000, WS_THICKFRAME := 0x40000
        , WS_MINIMIZE := 0x20000000, WS_MAXIMIZE := 0x1000000, WS_SYSMENU := 0x80000
        , WS_EX_DLGMODALFRAME := 0x1, WS_EX_CLIENTEDGE := 0x200, WS_EX_STATICEDGE := 0x20000
        , SWP_FRAMECHANGED := 0x0020, SWP_NOMOVE := 0x0002, SWP_NOSIZE := 0x0001
        , SWP_NOZORDER := 0x0004, SWP_NOOWNERZORDER := 0x0200
   
   lStyle := DllCall("GetWindowLongPtr", Ptr, hwnd, Int, GWL_STYLE, Ptr)
   lExStyle := DllCall("GetWindowLongPtr", Ptr, hwnd, Int, GWL_EXSTYLE, Ptr)
   
   lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)
   lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE)
   
   DllCall("SetWindowLongPtr", Ptr, hwnd, Int, GWL_STYLE, Ptr, lStyle)
   DllCall("SetWindowLongPtr", Ptr, hwnd, Int, GWL_EXSTYLE, Ptr, lExStyle)
   
   DllCall("SetWindowPos", Ptr, hwnd, Int, 0, Int, 0, Int, 0, Int, 0, Int, 0, Ptr, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER)
}

А вот к примеру в этой же игре WinMove в сравнении с DllCall("SetWindowPos", "UInt", hWnd, "UInt", 0, "Int", 0, "Int", 0, "Int", w/2, "Int", h, "UInt", 0x400) не срабатывает нормально, а второй вариант отрабатывает правильно.