I've been making a screensaver in Java, and am now working on command line argument support. To that end, one of the potential arguments listed here is for putting the screensaver as a child of the specified window. How can I take that argument and get the necessary window to put the screensaver into?
Also, what does it mean by 'modal to a window'?
In Windows you set the screen saver from somewhere in the control panels. In order for the control panel to interface with third-party screen savers, it is designed to run them with particular command line arguments.
So, when you select a screen saver from the list and hit the "Preview" button, the control panel executes this command:
ScreenSaver /p 1234
Here "ScreenSaver" woudl eb the path to your program, and 1234 would be an pointer value giving the HWND reference for the control panel window. The screen saver needs to then add itself as a child of that window to give a preview.
Likewise, when you hit the "Settings" button, the control panel executes this command:
ScreenSaver /c
The screen saver program needs to know that when it gets that command line argument, it should query the system for which window is in the foreground, and pop up a dialog in that window ("modal" means that it blocks access to that window until the dialog is closed).
Finally, when the control panel determines that it is actually time to run the screen saver, it executes this command:
ScreenSaver /s
This is when your program should go fullscreen.
Now, what does this mean to you as a Java developer?
First of all, inserting a Java component into a system window would involve some complicated JNI work. For the preview, the best you could do is the have your Java code render to an image that then gets drawn into an ordinary Windows component through JNI. Launching a Java dialog within a system window is probably flat-out impossible.
However, if you don't mind slight inconsistencies between your screensaver and native ones, you can probably get away without doing that. You could just have the Preview mode pop up a new window with the preview, and have the Settings mode likewise pop up its dialog in a new window. And the fullscreen mode should work just fine without adjustment.