我一直在用Java创建一个屏幕保护程序,现在正在开发命令行参数支持。为此,列出here的潜在参数之一是将屏幕保护程序作为指定窗口的子项。如何获取该参数并获得将屏幕保护程序放入的必要窗口?
另外,'模态到窗口'是什么意思?
答案 0 :(得分:0)
在Windows中,您可以从somewhere in the control panels设置屏幕保护程序。为了使控制面板与第三方屏幕保护程序连接,它可以使用特定的命令行参数运行它们。
因此,当您从列表中选择屏幕保护程序并点击“预览”按钮时,控制面板会执行以下命令:
ScreenSaver /p 1234
这里“ScreenSaver”将指向程序的路径,1234将是一个指针值,为控制面板窗口提供HWND参考。然后屏幕保护程序需要将自己添加为该窗口的子项以进行预览。
同样,当您点击“设置”按钮时,控制面板会执行以下命令:
ScreenSaver /c
屏幕保护程序需要知道当它获得该命令行参数时,它应该查询系统中哪个窗口在前台,并在该窗口中弹出一个对话框(“模态”表示它阻止访问那个窗口,直到对话框关闭。)
最后,当控制面板确定实际运行屏幕保护程序时,它会执行以下命令:
ScreenSaver /s
这是你的程序全屏显示的时候。
现在,这对您作为Java开发人员意味着什么?
首先,将Java组件插入系统窗口会涉及一些复杂的JNI工作。对于预览,您可以做的最好的事情是将Java代码渲染到图像,然后通过JNI将其绘制到普通的Windows组件中。在系统窗口中启动Java对话框可能是不可能的。
但是,如果您不介意屏幕保护程序与本机屏幕保护程序之间存在轻微的不一致,那么您可能无法做到这一点。您可以让预览模式弹出一个带有预览的新窗口,并使设置模式同样在新窗口中弹出其对话框。全屏模式应该可以正常工作而无需调整。