Кто еще помнит вин АПИ?
увы без него никак.
Вроде простое действие - найти по координатам мыши окно, типа как в 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 и у каждого своё скалирование.
Тебе для чего?
Если не все на винапи - нет смысла на него скатываться - необходимое в дотнете будет.
Насколько Я помню - мышь-на-окно работает нормально - возвращает хэндле топового окна под мышью.
где то так и сделал, как приходит событие от мышки вызываю опрос координат
Point point = Cursor.Position;
Но теперь выбранному окну нужно кинуть сообщения мыши и SendInput никак не помогает
Тебе для чего?
Да пригласили в гости и смотрю чел. карту перерисовывает. Подумалось, что можно относительно просто стыбрить.
Выбираешь окно с картой, выбираешь регион без статики (то что постоянно видно) делаешь скрин, передвигаешь эмуляцией мышки карту, делаешь опять скрин и так пока всё не отсканируешь.
Объединить и записать в файл.
необходимое в дотнете будет.
Да, ну дай ссылку как отследить перемещение мыши вне окна приложения, как выбрать окно под мышкой, как сэмулировать передвижение мыши/ нажатие клавиш и т.п.
мышь-на-окно работает нормально
Да, когда был один монитор без масштабирования.
SendInput работает как надо, за исключением UIPI blocking.
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...
Можно еще с нотепадом попробовать...
Тебе вроде как мышиные события генерировать надо было.
Ну так пробовать то можно на любом приложении, да и нажатие определенных клавиш тоже перемешает изображение, как случайно нашел.
SendInput никак не помогает
-----
Ну так другой уровень - для получения обычной реакции окна тебе нужно передать в очередь обработки событий нужное событие:
RaiseEvent(e)
только не забывай что там много разных окон.
Ну так другой уровень
В смысле, на более высший?
Попробуем, но ближе к выходным, спасибо.
Есть подозрение, что управлять окном никак не получится в данном приложении.
В смысле, на более высший?
------
Обработка уровня ВинАПИ это модификация WinProc() и помещение сообщений в очередь.
Обработка уровня .Нет это хандлирование уже диспачнутой очереди сообщений.
Есть подозрение
-----
Всегда можно. но на ВинАПИ довольно муторно.
Проверь самым простым образом - сделай форму с канвасом, помести ее на оба монитора и порисуй мышкой.
ClientToScreen и близнец ScreenToClient
The ClientToScreen function converts the client-area coordinates of a specified point to screen coordinates.
считаем 0 до Х клиент, но если приходит отрицательное значение то это как?
Нужен другой пересчет, на виртуальный монитор.
А причем тут приложение? Обвязку то на .Нете писать будешь. ну вот отсюда и танцуй.


