Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> WinAPI событие, или как убрать рамки окна
folang
сообщение 3.12.2017, 7:50
Сообщение #1


*

Registred
Сообщений: 3
Регистрация: 3.12.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.711



Помогите разобраться, сам начинающий юзер такой замечательно программы и не могу допереть как реализовать:
Хочу сделать скрипт, который убирает рамки у окон. Погуглив пару часов, я понял что это делать надо через "WinAPI событие": поменять класс окна и потом передвинуть куда надо.
Собственно проблема в WinAPI функции. Как я понимаю за это отвечает команда "SetWindowLong(hwnd, GWL_STYLE,WS_POPUP)".
Покопавших на вики uopilot нашел команду "sendmessage", но в описании и примере не очень понял как ее использовать. В примере "[Msg] - код события" и параметры переводятся в 10-чную систему, но не написано зачем?
То есть программе uopilot для команды "sendmessage" код и параметр события winapi надо переводить в 10-чную систему?
Порыскав на MSDN майкрософт, нашел значение для "WS_POPUP : 0x80000000L", для "GWL_STYLE : -16", а для SetWindowLong (или SetWindowLongPtr ) нету.

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

Спасибо
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.12.2017, 15:18
Сообщение #2


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



Я ничего не понял. Каша какая-то.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.12.2017, 19:09
Сообщение #3


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



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

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
folang
сообщение 4.12.2017, 15:54
Сообщение #4


*

Registred
Сообщений: 3
Регистрация: 3.12.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.711



Цитата(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 строчки, убирающие рамки\тайтл бар.
Хотелось так-же просто и в пилоте, но похоже не судьба
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.12.2017, 16:00
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



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

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

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
folang
сообщение 4.12.2017, 16:55
Сообщение #6


*

Registred
Сообщений: 3
Регистрация: 3.12.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.711



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

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


визуализированный пример:
http://clip2net.com/clip/m404604/dbc6d-cli...b.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
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.12.2017, 17:12
Сообщение #7


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



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

SendMessage это вообще другая степь. Нужен SetWindowLong. Еще надо учитывать, что на смену класса окно может отреагировать не как надо.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 5:22
Designed by Nickostyle