Używam prostego formularza wygenerowanego przez VS 2010, który zawiera 2 przyciski, start i stop. Uruchom wyzwalacze WH_MOUSE_LL przy pomocy SetWindowsHookEx, a stop zatrzymuje hak. Haczyk działa dobrze i zajmuję się "zastępowaniem" kliknięcia środkowym przyciskiem myszy dwukrotnym kliknięciem. Jedyny problem jaki mam, to kliknięcie przycisków Minimalizuj/Maksymalizuj/Zamknij formularza, wydaje się, że jest jakiś rodzaj "wyścigu wydarzeń" pomiędzy hakiem i zdarzeniami wywołanymi przez przyciski wymienione powyżej. Odzwierciedla to fakt, że po naciśnięciu jednego z tych przycisków jest on przez chwilę "wciśnięty", zanim zakończy działanie (na przykład zminimalizuje się forma). Po kliknięciu prawym przyciskiem myszy na formularzu i wybraniu akcji, która natychmiast odpowiada, to samo dzieje się po zatrzymaniu haka i naciśnięciu jednego z przycisków wymienionych powyżej. Czy ktoś napotkał takie zachowanie?C# low level hook myszy i obsługa zdarzeń formularza
6
A
Odpowiedz
2
Doświadczyłem tego również wcześniej. Nie jestem pewien co do dokładnej przyczyny, ale zawsze rozwiązałem ten problem, nasłuchując zdarzeń, które są uruchamiane, gdy mysz wchodzi i opuszcza obszar klienta formularza, okna, cokolwiek. Możesz użyć tych zdarzeń, aby podłączyć i odczepić mysz, a wtedy uzyskasz normalne zachowanie.
Moim pierwszym instynktem jest to, że prawdopodobnie używasz niewłaściwego narzędzia do pracy - nie mogę wymyślić wielu okoliczności, kiedy powinieneś użyć haka Windows. Być może, gdybyś mógł wrócić do problemu, który doprowadził do wdrożenia tego rozwiązania, i zamiast tego zamieścił pytanie na ten temat? –
Witam, o ile wiem, i przed badaniem tej metody zrobiłem sporo badań, że jeśli chcę, aby moja mysz generyczna generowała podwójne kliknięcie, gdy kliknę środkowym przyciskiem myszy, to "przechwycić" środkowe kliknięcie i zasymulować dwa kliknięcia lewym przyciskiem myszy do tego samego x, y myszy i jeśli chcę, żeby działała, nawet gdy moja aplikacja. nie jest skupiony lub zminimalizowany (lub na tacce systemowej) jest jedyną metodą. Jakikolwiek sposób jestem bardziej programista c/C++ Właśnie chciałem użyć C#, ponieważ prostota tworzenia GUI. – Alex
@Alex - Twoje badania prowadzą do złego wniosku. Wystarczy przechwycić środkowy przycisk myszy i wykonać to samo zdarzenie, co zdarzenie z dwukrotnym kliknięciem myszy (które naprawdę jest tylko pojedynczym kliknięciem). Poza tym nie wszystkie myszy mają środkowy przycisk myszy, więc uważaj na to. –