Pracuję nad własnym oprogramowaniem do obsługi myszy na moim komputerze przy użyciu C# i SDK kinect. Naprawdę chcę spróbować użyć go do grania w grę taką jak Red Alert lub jakiś rodzaj RTS, a nawet tylko do ogólnej nawigacji.Emulacja myszy w innym programie
Problem, który znalazłem, polega na tym, że podczas korzystania z programu za pomocą innej myszy, np. Czerwonego alertu lub wchodzenia na maszynę wirtualną, gdzie integracja myszy nie jest obsługiwana, program nie odbierze połączeń, które Program C# wykonuje wywołania System.Windows.Forms.Cursor, nie mówiąc już o wywołaniach mouse_event. Jestem nowy w kontaktach z oknami i tym, co się tutaj dzieje, czy ktoś może wytłumaczyć/postawić rozwiązanie?
--UPDATE-- Jako aktualizacja wciąż nie jestem do końca pewny, co się dzieje, ale wydaje mi się, że znalazłem obejście dla czerwonego alertu w szczególności;
Ponieważ czerwony alert to dość niski program graficzny, trywialne jest uruchamianie go w maszynie wirtualnej specjalnie dla mnie, vmware workstation z klientem XP. Jeśli użyjesz kodu mouse_event, to działa dobrze, JEDNAK, coś, z czym walczyłem, znajdował poprawny kod reprezentujący ruch myszy. Wydawałoby się, że flaga MOVE porusza myszą względnie, czego nie chciałem, a tag absolutny w ogóle nie poruszał myszą. To jest, w rzeczywistości, OR z nich, która produkuje absolutny ruch na ekranie, więc mój kod do ruchu myszy i emulacja klikając skończyło się patrząc tak:
mouse_event((int)0x00000002, cursor.X, cursor.Y, 0, 0);
za kliknięcie i
mouse_event((int)(0x00000001 | 0x00008000), x, y, 0 0);
dla ruchu myszy, gdzie x i y są nowymi współrzędnymi z 65535 (zakres bezwzględny). Czy to jest idealne? Nah. Ale działa na razie. Myślę, że jest coś do zrobienia w sposobie, w jaki okna ignorują niektóre programy podczas uruchamiania, być może z powodu trybu zgodności? Nie mam innej gry, aby przetestować ją teraz, ale w przyszłości opublikuję wyniki w trybie niezgodności.
- Pete
(on nie pozwolił mi pisać jako odpowiedź na kolejne dwie godziny i muszę spać złapać lot w godzinach porannych!)
Polecam użycie funkcji 'SendInput' zamiast funkcji przestarzałej' mouse_event'. –