用C语言更换壁纸并播放音频

想要自己编写一个程序可以比较方便的更换壁纸,并且自带音效
就在网上找了一些代码实现,并且自己尝试去搞懂了原理。

#include <stdio.h>
#include <Windows.h>
#pragma warning (disable:4996)
int main()
{
  int i;
  printf("The program is running...\n");
  printf("please wait...\n");
  for(i=0;i<100;i++)
  {
	  char str[100]={0};
	  sprintf(str,"G:\\a.jpg",i%11);
	  SystemParametersInfoA(0x0014,0,str,SPIF_UPDATEINIFILE);

	  char str1[100]={0};
	  sprintf(str1,"G:\\2.mp3",i%4);
	  ShellExecuteA(NULL,"open",str1,0,0,SW_HIDE);//隐藏窗口

	  if(i==0)
	  {
	    Sleep(1000);
	  }
	  else
	  {
	    Sleep(100000);//歌曲放100s后重放
	  }
  }
  return 0;
}

sprintf函数原型:
int sprintf( char *buffer, const char *format, [ argument] … )
该函数实现的是将第三项参数(任意类型)以第二项参数(输出的字符格式),输出到第一项(缓存区)。
经过多次尝试以后发现,显示在电脑屏幕上面的图像的大小和分辨率不是有数组大小决定的,而是存储的图像大小本身决定的。
SystemParametersInfoA(uiAction,uiParam,pvParam,fWinIni)
参考
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa#syntax
函数说明:允许获取和设置数量众多的Windows系统参数

第一个参数设置为SPI_SETDESKWALLPAPER 0x0014
注意当使用spi_setdeskwallpaper标志时,除非有错误(如指定文件不存在时),否则systemparametersinfo返回true。
我们可以看到对于SPI_GETDESKWALLPAPER 0x0073
作用是:检索桌面壁纸位图文件的完整路径。pvparam参数必须指向缓冲区才能接收以null结尾的路径字符串。将uiparam参数设置为pvparam缓冲区的大小(以字符为单位)。返回的字符串不会超过max_path个字符。如果没有桌面壁纸,返回的字符串为空。

所以第三个参数我们设置为缓冲区str

第四个参数设置为SPIF_UPDATEINIFILE
将新的系统范围参数设置写入用户配置文件。

ShellExecute函数原型及参数含义如下:
  function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;
  ●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口
句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
  ●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件
夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执
行默认操作“open”。
  ●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
  ●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
  ●Directory:用于指定默认目录。
  ●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
  若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
  最后的那个参数,为窗口指定可视性方面的一个命令。请用下述任何一个常数:
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序支持三种更换桌面换壁纸方式:开机自动更换,定时更换,热键更换(热键可以设置) 只要您指定壁纸文件所在文件夹,程序将该文件夹下(含所有子文件夹)所有的JPEG、GIF、TIF、PNG、JPE、JPG、BMP文件自动随机设置为桌面壁纸,使您的桌面壁纸随时都在变化。如果文件夹下的文件发生变化,程序会自动监控到并进行更新。 1、开机自动更换壁纸,前提当然得要将该程序设置为开机自动运行(本程序自动最小化加入到系统托盘)。 2、定时更换壁纸,只要您设置了时间间隔并启用定时更换功能,即可定时更换。 3、手动更换,在任何界面下按热键键即可马上更换壁纸(默认热键为CTRL+ALT+P,可以在设置中更改)。 本程序系VB2008编写,可在windows XP 及Vista下运行(在XP下需要安装.NET Framework2.0组件,请从微软官方网站下载。 安装方法: 方法一:解压缩后,运行“自动更换壁程序.application”即可安装程序,安装完后会在开始菜单建立菜单。 方法二:解压缩后,可以不进行安装,直接运行“Application Files\自动更换壁程序_1_0_0_2\自动更换壁程序.exe”即可,此时不会在开始菜单建立程序组。 首次运行本程序时,会自动弹出设置窗口,要求您指定壁纸文件所在文件夹等选项。如果您要将程序设置为开机自动运行,请选中“设置为开机自动运行并更换壁纸”复选框,取消该复选框则可以取消开机自动运行。 如果您对本程序有何建议或意见,请与本人联系 姓名:游平 地址:湖南省 株洲市 215信箱 财务处 邮编:412002 邮箱:myyouping@hotmail.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值