Przemapowanie dwóch klawiszy C#

Witam,

Jestem początkującym programistą w c# winform i chciałbym napisać program, który przemapowałby dwa klawisze z klawiatury fizycznej w czasie działania programu. Myślałem, że to będzie prosta sprawa jednak, kiedy zaczęłem szukać, znajdywałem jakieś cuda odwołań do klawwiatury niskopoziomowo. Nie wiem jak się odwoływać do takiego sposobu klawiatury. Czytałem że klawisz ma jakiś tam zawsze zapis np 00x0001. Może kotoś podeśle przydatne materiały dzieki, którym uda mi się napisać program albo pomoże w napisaniu?

 

Pozdrawiam

Przede wszystkim napisz *dlaczego* chcesz coś takiego zrobić? Faktycznie masz takie dziwaczne wymaganie jak zmiana mapowania klawiszy, czy to wymyślone przez Ciebie rozwiązanie jakiegoś głębszego problemu? W tym drugim przypadku prawdopodobnie można rozwiązać problem na kilka sposobów - lepszych niż przemapowanie klawiszy.

Co do tego “jak przemapować klawisze” - jeśli chcesz na chwilę, programowo, to przypuszczam, że musisz mieć hook na odpowiednie API Windowsa, stąd (jak to określiłeś) niskopoziomowe odwołania, które znalazłeś. To nie jest typowa operacja, więc umieszczanie wsparcia dla niej w C# wydaje mi się średnio użyteczne (szczególnie, że pewnie interop/pinvoke wystarczą).

W zależności co potrzebujesz zrobić, możesz obejrzeć program SharpKeys (napisany w C#, otwarte źródła): https://sharpkeys.codeplex.com/

 

Lub pogrzebać w kierunku “hooków” na klawiaturę w API WIndows - ale tak jak mówi @Ryan, potrzebujesz P/Invoke, to nie jest coś dostępnego w .NET w standardzie.

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

sharpkeys podmienia tylko wartosci w rejestrze i zeby zadzialal trzeba sie przelogowac, nie wiem czy o to koledze by chodzilo

Potrzebne jest mi do szkoły :wink: dziękuję za informacje. Czas się pobawić w kodzie :slight_smile: pozdrawiam

#include <windows.h>