Тут есть два варианта:
Первый - С помощью JIT компиляции генерировать нативный код, и внедрять его внутрь другого процесса, и уже там перехватывать все что вам нужно.
Второй - находить окно процесса, создавать второе окно таких же размеров и отрисовывать его поверх окна таргет процесса. Из минусов - не работает в полноэкранном режиме, только в оконном, и оконном без рамок, а также низкая производительность. Но это самый «простой» способ