在c++ builder中要实现桌布的自动更换功能,我认为主要两个关键点,其一既然要“自动”那就免不了要用到定时器,我们可以用timer这个组件来完成,这个还好解决,第二个问题可能比较麻烦了,我们如何来设置桌布,好像bcb中并没有提供什么组件,那我们也就只好自力更生了,虽说本人只是一只菜鸟,但这个问题还是难不了我,它主要是用到了systemparametersinfo 这个windows api函数,它的声明如下:
| bool systemparametersinfo( uint uiaction, // system parameter to query or set uint uiparam, // depends on action to be taken pvoid pvparam, // depends on action to be taken uint fwinini // user profile update flag ); |
| 键名 | 含义 |
| wallpaper | 桌布的文件名,但只限于bmp格式的位图 |
| wallpaperstyle | 设置桌布样式 若为0,桌布将以原始尺寸显示在桌面中央 若为1,桌布将填满桌面 若为2,将桌布放大的画面大小,图像有可能失真 |
| wallpaperoriginx | 如果wallpaperstyle为0,则这表示图像左上角x轴坐标 |
| wallpaperoriginy | 如果wallpaperstyle为0,则这表示图像左上角y轴坐标 |
| #include <registry.hpp> //先在注册表里添好桌布样式,在设置桌布 tregistry *registry = new tregistry; try { registry->openkey(“\\control panel\\desktop”,false); registry->writestring("tilewallpaper","0"); //设置桌布样式 registry->writestring("wallpaperstyle",wallstyle); } __finally { delete registry; } } //设置桌布 systemparametersinfo(spi_setdeskwallpaper, 0,filename.c_str(),spif_updateinifile spif_sendwininichange); |
| void __fastcall tform1::timer1timer(tobject *sender) { if (listbox1->items->count<=0) { return ; } if (index>=listbox1->items->count) { index=0; } //如果是jpg格式就将其转换为bmp格式,将其存到临时文件夹中 if(uppercase(listbox1->items->strings[index]).pos(".jpg") uppercase(listbox1->items->strings[index]).pos(".jpeg")) { ansistring filename=extractfilename(listbox1->items->strings[index]); int len=filename.lastdelimiter("."); filename=filename.substring(0,len-1)+".bmp"; unsigned int *size=new unsigned int(256); char * buffer=new char[256]; gettemppath(*size,buffer); filename=ansistring(buffer)+filename; jpegtobmp(listbox1->items->strings[index],filename); //设置桌布 systemparametersinfo(spi_setdeskwallpaper,0,listbox1->items->strings[index].c_str(), spif_updateinifile spif_sendwininichange); } else { //设置桌布 systemparametersinfo(spi_setdeskwallpaper,0,listbox1->items->strings[index].c_str(), spif_updateinifile spif_sendwininichange); } //重建系统缓存 rebuildiconcache(); index++; } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器