Mapowanie klawiszy, podmiana układu klawiatury

0

Cześć, jako nowy użytkownik pasuje się przywitać ;)
Dręczy mnie pytanie, czy możliwe jest napisanie w javie programu, który zmieniał by dla innej aplikacji klawiaturę, mianowicie chciałbym aby klawisze 'A', 'B', 'C' odpowiadały np jako F1, F2, F3?

0

Nie wiem ale wydaje mi się że robienie czegoś takiego z poziomu virtalnej maszyny mija się z celem.
Wydaje mi się że trzeba zejść na trochę niższy poziom abstrakcji jakim w tym przypadku może okazać się System Operacyjny.

Samo przechwycenie klawiatury to wydaje się do zrobienia np przy pomocy aplikacji z powiedzmy czymś w rodzaju przezroczystego okna "always on top". Gorzej z wysłaniem zmapowanych "klawiszy" do programu docelowego.

0

To jest łatwe, możliwe i przenośne tylko jeżeli tą inną aplikacją będzie również program działający na tej samej JVM.W przypadku jeżeli chodzi Ci o dowolny program i na dodatek jest to program w Windows, to musisz zejść do poziomu systemu - czyli, albo napisać to w C#/C++/C, albo użyć JNI lub JNA (co i tak sprowadza się do C/C++) i najlepiej jeszcze skompilować tak otrzymany kod do pliku exe. Dość niewygodne i dla początkującego wystarczająco trudne, żeby spokojnie odłożyć to na później.

0
Olamagato napisał(a)

To jest łatwe, możliwe i przenośne tylko jeżeli tą inną aplikacją będzie również program działający na tej samej JVM.W przypadku jeżeli chodzi Ci o dowolny program i na dodatek jest to program w Windows, to musisz zejść do poziomu systemu - czyli, albo napisać to w C#/C++/C, albo użyć JNI lub JNA (co i tak sprowadza się do C/C++) i najlepiej jeszcze skompilować tak otrzymany kod do pliku exe. Dość niewygodne i dla początkującego

No czy kolega pytający jest początkujący tego nie wiemy.

Olamagato napisał(a)

wystarczająco trudne, żeby spokojnie odłożyć to na później.

No można by jeszcze skorzystać z czegoś w rodzaju "mostu". Tzn wymyśleć coś w rodzaju bardzo prostego protokołu.
Napisać serwer np w C/C++ itp i komunikować się już z poziomu Javy z tym serwerem baaa być może ( jeżeli mamy dostęp) Xserwer zapewnia taki interfejs ( coś mi się obiło o uszy ) to być może realnym okazało by się łączyć tylko i wyłącznie z poziomu Javy przez sieć z lokalnym Xserwerem i przekazywać mu odpowiednie znaki do odpowiedniego okna - to wydaje się być całkiem realne dlatego możesz coś poszperać w tym kierunku i się pochwalić ewentualnie.

0
marcintom napisał(a)

No czy kolega pytający jest początkujący tego nie wiemy.

Wiemy. Z jednego powodu - odpowiedź na pytanie "czy możliwe jest napisanie [...] programu..." brzmi: "tak", a następnie podają koszt wykonania (np. inwestorowi). Osoby zaczynające programować tego nie wiedzą i dlatego się pytają. :)

No można by jeszcze skorzystać z czegoś w rodzaju "mostu". Tzn wymyśleć coś w rodzaju bardzo prostego protokołu.

Co sprowadza się znowu do napisania choćby minimalnej ilości kodu w C/C++.
W każdym razie zrobienie tego przenośnie, to wyzwanie z jakim nie poradził sobie jeszcze Sun, a Microsoft próbuje w czymś podobnym pogrzebać, co jak na razie zaowocowało wielkością .NET na poziomie 350 MB. :/
Pozdrawiam.</quote>

0
Olamagato napisał(a)

Co sprowadza się znowu do napisania choćby minimalnej ilości kodu w C/C++.

No niekoniecznie bo jeżeli można by się komunikować bezpośrednio z Xserwerem ( który da się odpalić również na Win )
po prostu uzyskując łączność przez gniazdo to można by pisać tylko w Javie korzystając z wew protokołu komunikacji Xów.
Ale tak czy inaczej trąci to lekkim hardkorem. ;)

Olamagato napisał(a)

W każdym razie zrobienie tego przenośnie, to wyzwanie z jakim nie poradził sobie jeszcze Sun, a Microsoft próbuje w czymś podobnym pogrzebać, co jak na razie zaowocowało wielkością .NET na poziomie 350 MB. :/
Pozdrawiam.

Nie to żebym śledził jakoś nadmiernie technologie MS, ale ta firma od zawsze lubi być największa pod każdym wzg.

0

Początkującym już nie jestem, napisałem kiedys program działający w ten sposób w C++, wiem jak się do tego zabrać, wiem też, że .NET Framework oferuje takową funkcjonalność (też pisałem program który wysyłał klawisze do danego programu w Windows) i właśnie ciekawiło mnie, czy jest to możliwe w Java.
Ją dopiero zgłębiam, i już widać wyraźną różnicę miedzy .NET a JVM (nie stwierdzam które podejście jest lepsze - czy całkowitej izolacji, czy zintegrowania z systemem, bo jak każdy wie, to zależy od potrzeb).
Właściwie mojego pytania by nie było, gdybym lepiej zaznajomił się z JVM.
Dziękuje za podpowiedzi :)

0

No tak to właśnie jest z technologiami MS. Widać tu, że .NET jest wręcz wrośnięty w system, a już na pewno mocno zakorzeniony. Java natomiast "jest" ( choć nie zawsze :) ) przenośna, i jej twórcy nie mogą sobie jak widać pozwolić
na tak głębokie zapuszczanie korzeni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1