HWND w javie

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.

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.

0

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

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

 
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.

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