Тема: AHK: Альтернатива WinSet
Добрый день!
Интересует альтернативное убирание рамок окна, при использовании:
WinSet, Style, -0xC40000, ahk_exe myGame.exeРамки не убираются. Ткните в пример через DllCall.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Добрый день!
Интересует альтернативное убирание рамок окна, при использовании:
WinSet, Style, -0xC40000, ahk_exe myGame.exeРамки не убираются. Ткните в пример через DllCall.
Игры используют нестандартные окна, рамки могут быть просто нарисованными.
Игры используют нестандартные окна, рамки могут быть просто нарисованными.
Да нет, вроде стандартное Windows окно, дело в том что в зависимости от "фазы луны" срабатывает и приведенный код. Вот ищу способ попробовать через DllCall, нашел пример на C/C++. Может кто подскажет как его применить в AHK
kharlashkin, не нужно цитировать предыдущий пост. Для начала стоит попробовать обращаться к окну не по ahk_exe, а по названию и/или ahk_class.
teadrinker, пробовал - не помогает. И по названию и по процессу и по ahk_class.
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 изменить.
Проверил Вашим кодом и немного модифицированным (чтобы все через 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) не срабатывает нормально, а второй вариант отрабатывает правильно.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться