Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Кто еще помнит вин АПИ?

1053  
AlexNek патриот07.06.24 19:22
AlexNek
NEW 07.06.24 19:22 

увы без него никак.

Вроде простое действие - найти по координатам мыши окно, типа как в spy++. Но как обычно но..

Мыша выдает данные в одних координатах

The x- and y-coordinates of the cursor, in per-monitor-aware screen coordinates.

https://learn.microsoft.com/en-us/windows/win32/api/winuse...

А поиск работает похоже в виртуальных координатах

https://learn.microsoft.com/en-us/windows/win32/api/winuse...

int nVirtualWidth = User32Api.GetSystemMetrics(SystemMetric.SM_CXVIRTUALSCREEN); //3267

int nVirtualHeight = User32Api.GetSystemMetrics(SystemMetric.SM_CYVIRTUALSCREEN); //1080

int nVirtualLeft = User32Api.GetSystemMetrics(SystemMetric.SM_XVIRTUALSCREEN); //-1707

int nVirtualTop = User32Api.GetSystemMetrics(SystemMetric.SM_YVIRTUALSCREEN); //0

как за эти границы выходишь всё никаких окон.

Что то не получается найти перевод в виртуальные координаты.

В данном случае моника 2 и у каждого своё скалирование.


#1 
Murr патриот08.06.24 03:26
Murr
NEW 08.06.24 03:26 
в ответ AlexNek 07.06.24 19:22

Тебе для чего?

Если не все на винапи - нет смысла на него скатываться - необходимое в дотнете будет.


Насколько Я помню - мышь-на-окно работает нормально - возвращает хэндле топового окна под мышью.

#2 
NightWatch коренной житель08.06.24 09:18
NightWatch
AlexNek патриот08.06.24 10:10
AlexNek
NEW 08.06.24 10:10 
в ответ NightWatch 08.06.24 09:18

где то так и сделал, как приходит событие от мышки вызываю опрос координат

Point point = Cursor.Position;

Но теперь выбранному окну нужно кинуть сообщения мыши и SendInput никак не помогает

#4 
AlexNek патриот08.06.24 10:20
AlexNek
NEW 08.06.24 10:20 
в ответ Murr 08.06.24 03:26
Тебе для чего?

Да пригласили в гости и смотрю чел. карту перерисовывает. Подумалось, что можно относительно просто стыбрить.

Выбираешь окно с картой, выбираешь регион без статики (то что постоянно видно) делаешь скрин, передвигаешь эмуляцией мышки карту, делаешь опять скрин и так пока всё не отсканируешь.

Объединить и записать в файл.


необходимое в дотнете будет.

Да, ну дай ссылку как отследить перемещение мыши вне окна приложения, как выбрать окно под мышкой, как сэмулировать передвижение мыши/ нажатие клавиш и т.п.


мышь-на-окно работает нормально

Да, когда был один монитор без масштабирования.

#5 
NightWatch коренной житель08.06.24 10:29
NightWatch
NEW 08.06.24 10:29 
в ответ AlexNek 08.06.24 10:10

SendInput работает как надо, за исключением UIPI blocking.

#6 
AlexNek патриот08.06.24 10:35
AlexNek
NEW 08.06.24 10:35 
в ответ NightWatch 08.06.24 10:29

An accessibility application can use SendInput to inject keystrokes corresponding to application launch shortcut keys that are handled by the shell. This functionality is not guaranteed to work for other types of applications.

https://learn.microsoft.com/en-us/windows/win32/api/winuse...

Можно еще с нотепадом попробовать...

#7 
NightWatch коренной житель08.06.24 10:38
NightWatch
NEW 08.06.24 10:38 
в ответ AlexNek 08.06.24 10:35

Тебе вроде как мышиные события генерировать надо было.

#8 
AlexNek патриот08.06.24 10:44
AlexNek
NEW 08.06.24 10:44 
в ответ NightWatch 08.06.24 10:38

Ну так пробовать то можно на любом приложении, да и нажатие определенных клавиш тоже перемешает изображение, как случайно нашел.

#9 
Murr патриот10.06.24 12:33
Murr
10.06.24 12:33 
в ответ AlexNek 08.06.24 10:10

SendInput никак не помогает

-----

Ну так другой уровень - для получения обычной реакции окна тебе нужно передать в очередь обработки событий нужное событие:

RaiseEvent(e)

только не забывай что там много разных окон.

#10 
Murr патриот10.06.24 12:39
Murr
AlexNek патриот10.06.24 19:22
AlexNek
10.06.24 19:22 
в ответ Murr 10.06.24 12:33
Ну так другой уровень

В смысле, на более высший?

Попробуем, но ближе к выходным, спасибо.

Есть подозрение, что управлять окном никак не получится в данном приложении.

#12 
Murr патриот11.06.24 00:09
Murr
NEW 11.06.24 00:09 
в ответ AlexNek 10.06.24 19:22

В смысле, на более высший?

------

Обработка уровня ВинАПИ это модификация WinProc() и помещение сообщений в очередь.

Обработка уровня .Нет это хандлирование уже диспачнутой очереди сообщений.


Есть подозрение

-----

Всегда можно. но на ВинАПИ довольно муторно.

#13 
Murr патриот11.06.24 00:12
Murr
NEW 11.06.24 00:12 
в ответ Murr 11.06.24 00:09

Проверь самым простым образом - сделай форму с канвасом, помести ее на оба монитора и порисуй мышкой.

#14 
Программист коренной житель11.06.24 08:05
NEW 11.06.24 08:05 
в ответ AlexNek 07.06.24 19:22, Последний раз изменено 11.06.24 08:06 (Программист)

ClientToScreen и близнец ScreenToClient

#15 
AlexNek патриот11.06.24 21:02
AlexNek
NEW 11.06.24 21:02 
в ответ Murr 11.06.24 00:09
Обработка уровня .Нет

А кто сказал, что управляемое приложение на .НЕТ?

#16 
AlexNek патриот11.06.24 21:05
AlexNek
NEW 11.06.24 21:05 
в ответ Программист 11.06.24 08:05

The ClientToScreen function converts the client-area coordinates of a specified point to screen coordinates.

считаем 0 до Х клиент, но если приходит отрицательное значение то это как?

Нужен другой пересчет, на виртуальный монитор.

#17 
Murr патриот11.06.24 23:16
Murr
NEW 11.06.24 23:16 
в ответ AlexNek 11.06.24 21:02

А причем тут приложение? Обвязку то на .Нете писать будешь. ну вот отсюда и танцуй.

#18