dmitry11 |
Отправлено: 25 Февраля, 2020 - 22:11:16
|
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2020
Репутация: 0
|
Всем доброго времени суток!
external(INT, "InvalidateRect", "InvalidateRect", "user32.dll"
int x=257, y=602;
win w=window ("WindowsGame", "WindowsGameClass", -1);
visualwindow(0, 485, 22, 713, 142, x, y, 100, w);
enabletimer(0);
transparency (-1, w);
visualwindow(0, 485, 22, 713, 142, x, y, 100, w);
loop()
{
sendkey(F5, w);
pause(2000);
}
CREATE_TIMER(0, 50)
{
if(getkeystate(192)==1)
{
getmouse(x, y);
InvalidateRect(0,0,1);
visualwindow(0, 0, 0, 100, 100, x, y, 100, w);
}
}
Этот код выводит вырезаную часть окна, размещает в нужных мне координатах и сворачивает окно клиента, при этом отображая происходящее. Но не работает с клавиатурой и мышкой.
Подскажите плз способы решения.
Заранее благодарен за помощь!
Дмитрий.(Отредактировано автором: 25 Февраля, 2020 - 22:19:58) |
|
|
Zireael |
Отправлено: 26 Февраля, 2020 - 00:28:03
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Но не работает с клавиатурой и мышкой.
Что именно не работает?
Цитата: pause(2000);
При таких паузах таймер сработает только 1 раз в 2 секунды. Можно заменить на:
CODE:looptime(2000)sleep(1); |
|
|
dmitry11 |
Отправлено: 26 Февраля, 2020 - 09:33:40
|
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2020
Репутация: 0
|
Цитата: pause(2000);
При таких паузах таймер сработает только 1 раз в 2 секунды. Можно заменить на:
CODE:looptime(2000)sleep(1);
Спасибки Буду пробовать!
(Добавление)
Есть еще один вопрос.
Есть ли возможность запустить несколько вырезаных областей с одного окна с разными координатами размещения.
Заранее благодарен за помощь!
Дмитрий.(Отредактировано автором: 26 Февраля, 2020 - 09:34:15) |
|
|
dmitry11 |
Отправлено: 10 Марта, 2020 - 23:29:16
|
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2020
Репутация: 0
|
И снова Здравствуйте!
Итак по порядку.
Перечитал тему и не один раз, перепробовал все предоставленые коды, комбинировал и тд.
Так вот запустил игру:
инициализировал окно,
вырезал часть экрана,
вывел её в нужные координаты на мониторе,
включил таймер,
включил прозрачность окна,
включил возможность перемещать отображаемое оно,
ну и само отображение окна, и вот что вышло.
CODE:
external(INT, "InvalidateRect", "InvalidateRect", "user32.dll");
int x=257, y=602;
win w=window ("Окно игры", "Окно игры", -1);
visualwindow(0, 480, 24, 708, 144, x, y, 100, w);
enabletimer(0);
transparency (-1, w);
loop()
{
sendkey(F5, w);
looptime(2000)sleep(1);
}
CREATE_TIMER(0, 50)
{
if(getkeystate(192)==1)
{
getmouse(x, y);
InvalidateRect(0,0,1);
visualwindow(0, 480, 24, 708, 144, x, y, 100, w);
}
}
Все норм окно отображается в нужных координатах, отображение происходит в реальном времени, круть.
Подскажите можно ли при наведении в это вырезаное окно кликнуть мышью чтобы действие передавалось основному в том же месте куда кликаеш мышью, или навел мыш нажал нужную клавишу. Например окно логирования : клик в нужную область ввод логина пароля и энтер.
У меня получается только ролик покрутить при этом прозрачное (основное) окно должно быть выделено. Без прозрачности все тоже все также.
Заранее благодарен за помощь!
Дмитрий. |
|
|
|