使用SystemParametersInfo桌面的时候,用法如下:
invoke SystemParametersInfo,SPI_SETDESKWALLPAPER,0,offset szPath,SPIF_UPDATEINIFILE
最近帮朋友写了一个随机换桌面背景的小程序,发现这个函数一个很关键的问题,需要了解的朋友接着往下看,高手安静的飘过吧,别说我垃圾就行……哈哈
程序源代码如下(使用win32汇编,IDE是RADASM):
.386
.model flat,stdcall
option casemap:none
;※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include Stdlib.Inc
includelib Stdlib.lib
;※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
ICO_MAIN equ 1000h
;※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
.const
szPathBmp db 'C:/DesktopWall/*.bmp',0
szPathJpg db 'C:/DesktopWall/*.jpg',0
;szPathBmp db '*.bmp',0
;szPathJpg db '*.jpg',0
szError db '未找到任何bmp和jpg的文件',0dh,0ah,
'程序将退出',0dh,0ah,
'谢谢使用',0dh,0ah,
'BY:GLCWOLF',0
szErrorCap db '查找图片失败',0
.data
szTest1 db '%d',0
szTest2 db '%s',0
szBufferTest db 128 dup (?)
szPath db 'C:/DesktopWall/',0
.data?
dwCount dd ?
hFindFile dd ?
szBuffer db 256 dup (?)
szName db MAX_PATH dup (?)
szBufferName db 100000 dup(?)
dwRand dd ?
dwFileCount dd ?
dwAddr dd ?
stWin32FindData WIN32_FIND_DATA
dwNameAddr dd ?
.code
_FindBmpFiles proc uses esi;查找bmp文件
invoke FindFirstFile,offset szPathBmp,offset stWin32FindData
.if eax != INVALID_HANDLE_VALUE ;如果找到第一个bmp文件,保存句柄,进行FindNextFile
mov hFindFile,eax
mov esi,offset szBufferName
.while TRUE
inc dwCount
invoke StrCpy,esi,offset stWin32FindData.cFileName ;把找到的文件的文件名拼接到缓存区里
add esi,sizeof stWin32FindData.cFileName
mov dwNameAddr,esi
invoke FindNextFile,hFindFile,offset stWin32FindData
.break .if eax == FALSE
.endw
invoke FindClose,hFindFile ;关闭文件句柄
.endif
ret
_FindBmpFiles endp
;※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
_FindJpgFiles proc uses esi;注释类似与_FindBmpFiles
.if dwCount ==0
mov esi,offset szBufferName ;如果没找到BMP图片,那么把缓存区的地址给esi
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!