Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171

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

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

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

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

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

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

53
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
18.04.2021, 21:51  [ТС]
Студворк — интернет-сервис помощи студентам
Вот, еще что интересно: у 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
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
18.04.2021, 22:06
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Метод дырки как CreateRectRgn?
У меня ваш эксперимент не подтвердился. При клике на "дырке" выдает HWND именно окна под дыркой.
Нет.
Я Выложил своё окно сюда: Назначение цвета прозрачным
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
13.11.2021, 08:51
Пытаюсь использовать 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
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 12:16
Цитата Сообщение от antro735 Посмотреть сообщение
по идее, должна возвращать хендл окна, которое находится ПОД активным окном
Не факт.
Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности.
Ваше окно может быть вообще в другом углу экрана.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
13.11.2021, 12:36
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности.
Но ведь в параметрах функции в качестве определяемого окна указано только что созданное нами окно. Ведь если дебагнуть hwnd, то дескриптор созданного нами окна определяется правильно.
Может быть я неправильно понимаю Z - последовательность ?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 13:40
Цитата Сообщение от antro735 Посмотреть сообщение
в качестве определяемого окна указано только что созданное нами окно.
Так то оно так. Но другим то окнам что от этого, ваше окно не меняет Z последовательность
Запустите подряд 5 калькуляторов. Повозите над ними своё окно. Чувствуете, что окон много, а нижнее в Z - последовательности только одно?
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
13.11.2021, 13:45
А как же тогда мне правильно узнать дескриптор окна, находящийся под созданным нами окном ?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 15:58
А для чего нужно создавать своё окно поверх чужого? Ведь чужое не видно будет!
В теме уже есть простой способ:
Функция WindowFromPoint извлекает дескриптор окна, которое содержит заданную точку.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
13.11.2021, 16:15
Верхнее окно можно растягивать и уменьшать, выбирая тем самым область для скриншотов окна, которое находится под ним. То есть, Выбрали область при помощи верхнего окна, закрыли верхнее окно, и потом скриншотим эту область в окне, находящимся под ним. Хендл нужен, чтоб скриншотить это окно даже если оно перекрыто другими окнами.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
13.11.2021, 17:06
Цитата Сообщение от antro735 Посмотреть сообщение
Выбрали область при помощи верхнего окна,
Ну и нормально. В это время можно при помощи WindowFromPoint добыть дескриптор окна.
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
13.11.2021, 17:36
Сейчас попробую.... )))

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

Добавлено через 9 минут
Всё сработало !!! Ещё раз огромное спасибо за помощь !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2021, 19:48

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

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

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

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

Как предотвратиь появление определенного чужого окна
Написал прогу, которая постоянно перебирает все окна и закрывает, если у окна определенный заголовок #include &lt;windows.h&gt; BOOL...


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

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru