3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
1

Как отследить события чужого окна?

06.04.2021, 19:22. Показов 6817. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Помогите, пожалуйста в решении следующей задачи...
Есть окно цель которого "следить" за неким участком экрана, а точнее за тем, что происходит под ним.. .
Допустим, что окно следит за Paint-ом, браузером или word-ом и пользователь двигает(или скролит) этот самый Paint, word или браузер.
Окно должно двигаться вслед за действиями пользователя.
Т.е. окно должно как бы приклеится к "отслеживаемой поверхности".
Сделать это можно двумя способами:
Первый, отслеживать и анализировать графические изменения на экране.
Теоретически есть и второй способ.... (вероятно, более простой, если знать как это делать)
Определить hWnd отслеживаемого окна(находящегося под следящим окном) и отслеживать его события.
Если, не трудно подскажите, пожалуйста как это делается, а точнее...
Как получить hWnd окна находящегося под следящим окном?
И как отследить события окна по hWnd?
Заранее, Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2021, 19:22
Ответы с готовыми решениями:

Как добавить свою кнопку в title-bar ЧУЖОГО окна?
Как добавить свою кнопку в title-bar ЧУЖОГО окна? Насколько я понял, полазив по Сети, это...

Как зная дескриптор чужого окна сделать его неактивным?
Подскажите пожалуйста, как зная дескриптор чужого окна сделать его неактивным (невосприимчивым к...

Как отследить разфокуксировку окна
Помогите плиз!!! Как отследить когда Мое окно потеряет фокус, т.е. пользователь перейдет на др...

Как отследить нажатие кнопки вне окна?
Нужно отслеживать нажатие кнопки вне формы(отслеживать надо сразу после запуска приложения) и при...

53
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
18.04.2021, 21:51  [ТС] 41
Author24 — интернет-сервис помощи студентам
Вот, еще что интересно: у GetCursorPos_ параметром служит указатель на структуру POINT, которая получает экранные координаты курсора. Но...... указатель на структуру Р это @p, следовательно, строка должна выглядеть вот так:
Цитата Сообщение от nigri_lupus Посмотреть сообщение
GetCursorPos_(@p)
Это если верить тому, что я читал: http://www.vsokovikov.narod.ru... sorpos.htm
Тем не менее, она работает и так:
Цитата Сообщение от Pro_grammer Посмотреть сообщение
GetCursorPos_(@p)
и так
Цитата Сообщение от Pro_grammer Посмотреть сообщение
GetCursorPos_(p)
Что это за нафиг с формой записи??? Ведь указатель на структуру это указатель на структуру, а не сама структура, но GetCursorPos_ её спокойно принимает в любой из этих форм записи. При этом WindowFromPoint_
Цитата Сообщение от nigri_lupus Посмотреть сообщение
p\x|p\y<<32
подавай.

Добавлено через 14 минут
Pro_grammer, Кстати, после экспериментов выяснилось, что WindowFromPoint видит hwnd невидимого глазом пользователя "дырявого" окна. Т.е. Видит не окно под "дыркой", которое видно пользователю, а окно содержащее дырку. Так, что его хоть на миг, но придется убрать с экрана, как это делают скришоторы, п жаль.... Хотелось этого избежать из эстетических соображений.
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
18.04.2021, 22:06 42
Цитата Сообщение от nigri_lupus Посмотреть сообщение
Что это за нафиг с формой записи?
Убедись, что это одинаково:
Debug p
Debug @p
По логике у структуры и должен возвращается её адрес, а что же ещё?
А так возвращается значение переменных
Debug p\x
Debug p\y

Добавлено через 12 минут
Цитата Сообщение от nigri_lupus Посмотреть сообщение
Т.е. Видит не окно под "дыркой", которое видно пользователю, а окно содержащее дырку.
Метод дырки как CreateRectRgn?
У меня ваш эксперимент не подтвердился. При клике на "дырке" выдает HWND именно окна под дыркой.
0
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
18.04.2021, 22:15  [ТС] 43
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Метод дырки как CreateRectRgn?
У меня ваш эксперимент не подтвердился. При клике на "дырке" выдает HWND именно окна под дыркой.
Нет.
Я Выложил своё окно сюда: Назначение цвета прозрачным
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 08:51 44
Пытаюсь использовать API функцию GetWindow_() с параметром GW_HWNDNEXT, которая, по идее, должна возвращать хендл окна, которое находится ПОД активным окном, но она почему-то возвращает хендл какого-то другого окна. В чём проблема не могу понять.
Ссылка на описание функции

Вот простой код:
PureBasic
1
2
3
4
5
6
7
8
hwnd = OpenWindow(1, 100, 100, 130, 10, "ОКНО")
Repeat
  Event = WindowEvent()
  If a = 0
    Debug GetWindow_(hwnd, #GW_HWNDNEXT)
    a = 1
  EndIf
Until Event = #PB_Event_CloseWindow
Есть ещё функция GetNextWindow_() , но она в пурике не работает.
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 12:16 45
Цитата Сообщение от antro735 Посмотреть сообщение
по идее, должна возвращать хендл окна, которое находится ПОД активным окном
Не факт.
Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности.
Ваше окно может быть вообще в другом углу экрана.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 12:36 46
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности.
Но ведь в параметрах функции в качестве определяемого окна указано только что созданное нами окно. Ведь если дебагнуть hwnd, то дескриптор созданного нами окна определяется правильно.
Может быть я неправильно понимаю Z - последовательность ?
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 13:40 47
Цитата Сообщение от antro735 Посмотреть сообщение
в качестве определяемого окна указано только что созданное нами окно.
Так то оно так. Но другим то окнам что от этого, ваше окно не меняет Z последовательность
Запустите подряд 5 калькуляторов. Повозите над ними своё окно. Чувствуете, что окон много, а нижнее в Z - последовательности только одно?
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 13:45 48
А как же тогда мне правильно узнать дескриптор окна, находящийся под созданным нами окном ?
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 15:58 49
А для чего нужно создавать своё окно поверх чужого? Ведь чужое не видно будет!
В теме уже есть простой способ:
Функция WindowFromPoint извлекает дескриптор окна, которое содержит заданную точку.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 16:15 50
Верхнее окно можно растягивать и уменьшать, выбирая тем самым область для скриншотов окна, которое находится под ним. То есть, Выбрали область при помощи верхнего окна, закрыли верхнее окно, и потом скриншотим эту область в окне, находящимся под ним. Хендл нужен, чтоб скриншотить это окно даже если оно перекрыто другими окнами.
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 17:06 51
Цитата Сообщение от antro735 Посмотреть сообщение
Выбрали область при помощи верхнего окна,
Ну и нормально. В это время можно при помощи WindowFromPoint добыть дескриптор окна.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 17:36 52
Сейчас попробую.... )))

Добавлено через 18 минут
Эх, у меня-самоучки ещё мало опыта.... Не могу разобраться как работать со структурами. В частности, как правильно здесь применить структуру POINT
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 18:40 53
Цитата Сообщение от antro735 Посмотреть сообщение
как правильно здесь применить структуру POINT
Было же выше:
Как отследить события чужого окна?
1
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 115
13.11.2021, 19:48 54
Благодарю, Pro_grammer !!! Сейчас буду пробовать !

Добавлено через 9 минут
Всё сработало !!! Ещё раз огромное спасибо за помощь !!!
0
13.11.2021, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2021, 19:48
Помогаю со студенческими работами здесь

Как отследить открытие нового окна в outlook?
Mne bi pri poyavlenii novogo okna tuda svoe menu zapihivat'. Spasibo. P.S. Nachalnik nastoyatelno...

Как изменить размер чужого окна?
Нужно создать панель управления размера окна определенного приложения. И еще полноэкранный режим....

Как отследить события на USB?
Здравствуйте. Есть подозрение, что какой-то драйвер или программа перехватывает USB порты на...

Как предотвратиь появление определенного чужого окна
Написал прогу, которая постоянно перебирает все окна и закрывает, если у окна определенный...

Как мне перехватить перерисовку чужого окна
Вариант погугли не подходит ибо там ничего нету. Мне надо узнать только что окно перерисовалось !

Как отследить события в Visual Studio
Хочу проследить все события в приложении начиная от его запуска. Пробовал Spy++ (x64) но он ничего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru