HWND w javie

BE
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:7
0

Chciałem napisać program, który wysyła wiadomość do innego uruchomionego programu. PostMessage. Moje pytanie brzmi, czy istnieje taka funkcja w Javie? Przewertowałem cały internet. Na jednej stronie jest napisane, że tak. Jednak w całym internecie nie spotykam się z jakimkolwiek użyciem tej funkcji. No i jeszcze funkcji FindWindow.

Może pisaliście już kiedyś takie programy i poczęstowalibyście mnie kawałkiem kodu?

Pozdrawiam.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około godziny
0

Niestety Java nie jest przystosowana do IPC (z tego co wiem), więc musisz się ratować jakimiś natywnymi bibliotekami poprzez JNI, albo stosować obejścia typu komunikacja przez potoki/ gniazda TCP, UDP/ etc Lipkerson (tzn forumowy kolega) zajmuje się zabawą z WinAPI spod Javy.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
BE
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:7
0

No właśnie liczyłem jednak na to, że da się to zrobić bez JNI.

lipkerson
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0

Możesz to zrobić JNI albo...JNA. Ja polecam JNA bo trochę się nakodziłem integrując urządzenia z Java i robi się całkiem przyjemnie.

http://jna.java.net/

Generalnie potrzebujesz wywoływać konkretne funkcje z konkretnych dll. Mapujesz funkcje z WINAPI javowymi typami. Normalnie musiałbyś tworzyć interfejs i każda funkcję z której chcesz skorzystać odpowiednio mapować.
Sprawa jest w Twoim wypadku prostsza ponieważ te głowne dllki (user32/kernel...itp) są pomapowane przez twórce JNA. Również wprost są zdefiniowane klasy symbolizujące typy z WINAPI: DWORD i LPTCSTR itp. znajdziesz to wszystko w platform.jar. Przejrzyj, zobacz przykłady na stronce...
Jak parametr funkcji jest in/out to stosuj byte[] javowe - zawsze daje rade.

Są też rzeczy które trzeba podejrzeć. Np. pobieranie HWND okna javowego (JFrame):

Kopiuj
 
public HWND pobierzHWNDOkna(JFrame frame) {
        HWND hWnd = new HWND();
        hWnd.setPointer(Native.getWindowPointer(frame));
        return hWnd;
    }

Ale to samo można wykonać na kilka sposobów.


Another jam from the world for the jam from the voices of the world......

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.