java - Opret barn vindue i en anden proces HWND? (for eksempel screensaver forhåndsvisning)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver en screensaver i Java. Det er primært til Windows, selv om jeg foretrækker at være så bærbar som praktisk.


Ifølge http://support.microsoft.com/kb/182383, når en pauseskærm er påkaldt med kommandolinjen args /p HWND, skal pauseskærmen 'Preview Screen Saver som barn i vinduet'. Formentlig er det sådan, at screensavers skal have deres lille preview i dialogboksen Screen Saver Settings. [2]


Så hvordan i Java opretter du en JFrame eller JComponent, der er et barn i et vindue, der tilhører en anden?
Jeg har set på Embed HWND (Window Handle) i en JPanel
hvilket er en slags omvendt spørgsmål: Udvikleren kontrollerer forældrenes vindue og ønsker at indlejre et barnevindue. I mit tilfælde kontrollerer jeg en børnemodel, som jeg vil have indlejret i en forælder, der ikke er 'min'. Kan jeg bruge JNA til at gøre det? [4]


Jeg vil heller ikke behøve at opretholde C-kode ud over Java-kode. (Så JNI er ikke foretrukket.) Jeg forstår, at JDIC skulle opfylde denne type behov, men jeg har læst, at JDIC er i det væsentlige død. 5]]


Jeg kører Windows 7, FWIW.

Bedste reference


Kig på Jdic, det har en SDK til screensavers, så i det mindste kan du studere deres kode .. [6] [7]

Andre referencer 1


Du skal ringe til en win32 api. Den api er i C. Du skal bruge interoplaget til at gøre dette. Jeg tror, ​​at alle muligheder vil være brutto.


For Java tror jeg det er JNI. Se dette på, hvordan du gør det.


Du skal også overføre værdien til SetParent. [9]


Pauseskærmen kører på samme sikkerhedsrettigheder som pauseskærmen, så det er ikke et sikkerhedsproblem.