虽说屏幕保护程序只是个相对特殊的exe(会接受/C、/P、/S等启动参数,具体可见诸多博文,在此不赘述),但是却让一个小小的描述卡住了。
我们知道,作为屏幕保护程序,安装后会在系统的“显示”对话框的列表里出现,而进而我们发现,现有的屏幕保护程序显示的并不是文件名,而是一行描述,而使用Delphi编写的exe却无法具备这个特性。
向搜索引擎寻求帮助后,得到了如下的描述:
You can define the text that will appear in the Control Panel Desktop list of screen savers by adding a {$D text} directive to the project source file. The $D directive inserts the given text into the module description entry of the executable file. For the Control Panel to recognize the text you must start with the term "SCRNSAVE", followed by your description.
Select Project Source from the Delphi View menu so you can edit the source file. Beneath the directive "{$R *.RES}", add the following line:
{$D SCRNSAVE Spheres Screen Saver}
The text "Spheres Screen Saver" will appear in the Control Panel list of available screen savers when we complete the project.
(http://burks.brighton.ac.uk/burks/language/pascal/uddf/pages/scrnsave.htm)
大意是在dpr文件中写入{$D SCRNSAVE [要显示的描述]},就可以在编译之后的exe内加入屏幕保护程序描述字符。
而就是因为这个仅有的说明(貌似疯狂的转载并不是好事,连已经无效的方法都被这样流传着)让我走了很多弯路,以这个说明为前提,我险些否定了自己的工作。
直到一天研究无果后,我决定另辟蹊径,既然里面说了是字符串,那么估计应该在程序内能找到。
于是我将系统内置的屏幕保护程序用eXeScope打开,赫然发现了新大陆:
在字符串节点下,key为1的值就是SCRNSAVE +空格+屏幕保护程序描述字符串。
那么那个{$D text}是什么呢?进而通过仔细查询,发现,这个关键字是生成应用程序描述的,而非字符串资源(找到这个说明后才猛然醒悟,为啥不深究一下这个$D呢,都怪自己太不自信了)
既然知道了描述字符串的规则,那就动手搞定。
新建一个.rc文件,设置如下格式:
stringtable
begin
1, "SCRNSAVE [要显示的描述字符串]"
End
具体编译、连接过程见此连接:http://www.blogjava.net/badboyryan/archive/2009/02/06/253555.html
之后在工程中使用{$R [资源文件名]}引入,编译,OK,搞定。