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?
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.
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.
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.
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>
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.
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 :)
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.