У меня есть ситуация, когда мне нужно встроить некоторые сторонние приложения Unity с закрытым исходным кодом в наши собственные.Я внедряю DLL, которая создает общую текстуру DX11 из их цепочки обмена.Эта часть работает, и она сделана.
Кроме того, я хочу скрыть форму, обертывающую приложение Unity (вы можете, к счастью, установить их родительский дескриптор с помощью командной строки), чтобы я мог на 100% контролировать то, что происходит с его текстурой внаше собственное приложение (+ чтобы оно не мешало общему виду нашего собственного приложения).Это также хорошо работает, я получаю текстуру без проблем, даже когда форма Unity полностью за кадром.
Теперь моя проблема заключается в том, что это приложение Unity требует использования с мультитач и после некоторого количества погугливанияЧтение переполнения / стек Я вроде бы пришел к выводу, что нет способа (или я не нашел никакого способа) составить действительные WM_POINTER*
сообщения только для одного окна в Windows.(это поддерживается тем, что вам нужно вызвать отдельную функцию WinApi для получения всех данных указателя / касания на основе их идентификатора, полученного в сообщении lParam
из WM_POINTER*
)
Так что я использую TouchInjection Windows API ( InitializeTouchInjection и InjectTouchInput ) (информация об этих API в Интернете вводит в заблуждение в лучшем виде, но я на самом деле решил все их причуды)отлично работает, если форма Unity видна на экране.Или, другими словами, если позиция касания находится за границами экрана.
И теперь, наконец, проблема: когда я указываю внеэкранную координату для введенных касаний, я получаю системное сообщение об ошибке ERROR_INVALID_PARAMETER (87 / 0x57)
.В противном случае это работает.Есть ли способ отключить эту проверку в Windows?Или кто-нибудь, кто решил эту проблему раньше?
(Наше приложение не предназначено для конечного пользователя, у нас есть полный контроль над средой, в которой оно работает, общесистемные модификации тоже в порядке.)
Заранее спасибо!