Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ WinAPI событие

Автор: folang 3.12.2017, 7:50

Помогите разобраться, сам начинающий юзер такой замечательно программы и не могу допереть как реализовать:
Хочу сделать скрипт, который убирает рамки у окон. Погуглив пару часов, я понял что это делать надо через "WinAPI событие": поменять класс окна и потом передвинуть куда надо.
Собственно проблема в WinAPI функции. Как я понимаю за это отвечает команда "SetWindowLong(hwnd, GWL_STYLE,WS_POPUP)".
Покопавших на вики uopilot нашел команду "http://uopilot.tati.pro/index.php?title=SendMessage", но в описании и примере не очень понял как ее использовать. В примере "[Msg] - код события" и параметры переводятся в 10-чную систему, но не написано зачем?
То есть программе uopilot для команды "sendmessage" код и параметр события winapi надо переводить в 10-чную систему?
Порыскав на MSDN майкрософт, нашел значение для https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx, для https://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx, а для https://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx (или https://msdn.microsoft.com/en-us/library/windows/desktop/ms644898%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 ) нету.

Вопрос: как выглядит в скрипте команда "sendmessage ([hWnd=workwindow [Msg=0 [wParam=0 [lParam=0]]]])" для сего действия.

Спасибо

Автор: Cockney 3.12.2017, 15:18

Я ничего не понял. Каша какая-то.

Автор: DarkMaster 3.12.2017, 19:09

Если я не ошибаюсь, то это немного другое винапи. Точнее это другая функция взамиодействия. Отсыл сообщения вин апи состоит из двух значений по 2 байта каждое. Вроде. Не помню уже точно. Короче говоря это другая функция. Стиль задается отдельной структурой, которую точно тут не описать.

Кстати отсылка сообщения винапи в чистейшем виде есть в windowScanner (есть в полезных советах). Там кстати и оба параметра можно и ручками задать и выпадающим меню выбрать.

Автор: folang 4.12.2017, 15:54

Цитата(Cockney @ 3.12.2017, 15:18) *

Я ничего не понял. Каша какая-то.

Коротко: как должен выглядеть скрипт, который убирает рамки у окон?
Развернуто: нашел инфу, что это можно сделать через скрипт пилота. Алгоритм примерно такой - получаем hWnd окна, меняем класс (тут как раз и убирается рамка, т.к. при смене класса меняем стиль) и если надо меняем размер, и все это делается через функционал WinAPI. Соответственно я зашел на вики пилота и про winapi нашел только команду "sendmessage", попытался сделать скрипт, но не получилось.

Цитата(DarkMaster @ 3.12.2017, 19:09) *

Если я не ошибаюсь, то это немного другое винапи. Точнее это другая функция взамиодействия. Отсыл сообщения вин апи состоит из двух значений по 2 байта каждое. Вроде. Не помню уже точно. Короче говоря это другая функция. Стиль задается отдельной структурой, которую точно тут не описать.

То есть реализовать "удаление" рамок окна не получиться?

Цитата(DarkMaster @ 3.12.2017, 19:09) *

Кстати отсылка сообщения винапи в чистейшем виде есть в windowScanner (есть в полезных советах). Там кстати и оба параметра можно и ручками задать и выпадающим меню выбрать.

Мне хотелось сделать это по средствам простого скрипта в пилоте, так-то ставить для этого windowScanner особо смысла нету. Т.к. у же есть скрипт на удаление рамок через AHKmacros, там буквально 4 строчки, убирающие рамки\тайтл бар.
Хотелось так-же просто и в пилоте, но похоже не судьба

Автор: DarkMaster 4.12.2017, 16:00

Цитата
Т.к. у же есть скрипт на удаление рамок через AHKmacros, там буквально 4 строчки, убирающие рамки\тайтл бар

можно его увидеть?
Цитата
То есть реализовать "удаление" рамок окна не получиться?

Насколько я понимаю (и помню) всю эту схему в пилот не воткнуть.

Автор: folang 4.12.2017, 16:55

Цитата(DarkMaster @ 4.12.2017, 16:00) *

можно его увидеть?


визуализированный пример:
http://clip2net.com/clip/m404604/dbc6d-clip-115kb.jpg?nocache=1
Цитата

{
If (WinTitle == "")
WinGetTitle, WinTitle, A
IfWinExist %WinTitle%
{
WinSet, Style, -0xC00000, %WinTitle%
WinSet, Style, -0x800000, %WinTitle%
WinSet, Style, -0x400000, %WinTitle%
WinSet, Style, -0x40000, %WinTitle%
WinMove, %WinTitle%, , 100, 100, 420, 280
}
Return
}

TitleBar(WinTitle:="")
{
If (WinTitle == "")
WinGetTitle, WinTitle, A
IfWinExist %WinTitle%
WinSet, Style, ^0xC00000, %WinTitle%
Return
}

Автор: Cockney 4.12.2017, 17:12

Написать плагин и все. В пилоте это не реализуемо.

SendMessage это вообще другая степь. Нужен SetWindowLong. Еще надо учитывать, что на смену класса окно может отреагировать не как надо.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)