我自己做根据图像目录,自动随机更换墙纸,用在有窗体的程序行,剥离窗口后,为什么能编译通过却得到效果?program DeskSet;uses
windows, SysUtils, Classes, shlobj, ComObj;const
JPEGPath = 'F:\aa\';
MyMutex = '{3275107E-70C3-4F8E-9640-9C90F813521B}';function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
//16为目录,与操作为16表示为一个目录
Result := ((SearchRec.Attr and 16) = 16)
and (SearchRec.Name <> '.') and (SearchRec.Name <> '..');
end;function SearchFile(MainPath: string; var FoundResult: TStrings):
Boolean;
var
i: integer;
Found: Boolean;
subdir1: TStrings;
searchRec: TsearchRec;
// HasSubDir: Boolean;
begin
found := false;
subdir1 := TStringList.Create; //字符串列表必须动态生成
//找出所有下级子目录。
// HasSubDir := False; if (FindFirst(MainPath + '*.jpg', 4095, SearchRec) = 0) then //4095指搜索全部
begin
if IsValidDir(SearchRec) then
begin
// HasSubDir := True;
subdir1.Add(SearchRec.Name);
end;
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
begin
// HasSubDir := True;
subdir1.Add(SearchRec.Name);
end;
end;
end;
FindClose(SearchRec); if (FindFirst(MainPath + '*.jpg', faAnyFile, SearchRec) = 0) then
begin
found := True;
if (not IsValidDir(SearchRec)) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
FoundResult.Add(MainPath + SearchRec.Name);
end;
while (FindNext(SearchRec) = 0) do
begin
if (not IsValidDir(SearchRec)) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
FoundResult.Add(MainPath + SearchRec.Name)
end;
end;
end;
FindClose(SearchRec); //这是递归部分,查找各子目录。
for i := 0 to subdir1.Count - 1 do
found := Searchfile(MainPath + subdir1.Strings[i] +
'\', foundresult) or found;
//资源释放并返回结果。
subdir1.Free;
result := found;
end;procedure SetDesktopBackground(const AFileName: string);
var
ADeskTop: IActiveDesktop;
wallpaper: PwideChar;
begin ADeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
wallpaper := PwideChar(WideString(AFileName));
ADeskTop.SetWallpaper(wallpaper, 0);
ADeskTop.ApplyChanges(AD_APPLY_ALL);end;procedure RandomDesktopWall;
var
i: int64;
mStrList: TStrings;begin
mStrList := TStringList.Create; SearchFile(JPEGPath, mStrList);
mStrList.SaveToFile('C:\a.txt');
try
if mStrList.Count = 0 then
exit;
Randomize;
i := Random(mStrList.Count);
if FileExists(mStrList.Strings[i]) then
SetDesktopBackground(mStrList.Strings[i]);
finally
mStrList.Free;
end;end;var
MutexHandle: Cardinal;
//程序入口
begin
if OpenMutex(MUTEX_ALL_ACCESS, FALSE, MyMutex) <> 0 then
Exit; MutexHandle := CreateMutex(nil, TRUE, MyMutex); RandomDesktopWall; ReleaseMutex(MutexHandle);end.
windows, SysUtils, Classes, shlobj, ComObj;const
JPEGPath = 'F:\aa\';
MyMutex = '{3275107E-70C3-4F8E-9640-9C90F813521B}';function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
//16为目录,与操作为16表示为一个目录
Result := ((SearchRec.Attr and 16) = 16)
and (SearchRec.Name <> '.') and (SearchRec.Name <> '..');
end;function SearchFile(MainPath: string; var FoundResult: TStrings):
Boolean;
var
i: integer;
Found: Boolean;
subdir1: TStrings;
searchRec: TsearchRec;
// HasSubDir: Boolean;
begin
found := false;
subdir1 := TStringList.Create; //字符串列表必须动态生成
//找出所有下级子目录。
// HasSubDir := False; if (FindFirst(MainPath + '*.jpg', 4095, SearchRec) = 0) then //4095指搜索全部
begin
if IsValidDir(SearchRec) then
begin
// HasSubDir := True;
subdir1.Add(SearchRec.Name);
end;
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
begin
// HasSubDir := True;
subdir1.Add(SearchRec.Name);
end;
end;
end;
FindClose(SearchRec); if (FindFirst(MainPath + '*.jpg', faAnyFile, SearchRec) = 0) then
begin
found := True;
if (not IsValidDir(SearchRec)) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
FoundResult.Add(MainPath + SearchRec.Name);
end;
while (FindNext(SearchRec) = 0) do
begin
if (not IsValidDir(SearchRec)) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
FoundResult.Add(MainPath + SearchRec.Name)
end;
end;
end;
FindClose(SearchRec); //这是递归部分,查找各子目录。
for i := 0 to subdir1.Count - 1 do
found := Searchfile(MainPath + subdir1.Strings[i] +
'\', foundresult) or found;
//资源释放并返回结果。
subdir1.Free;
result := found;
end;procedure SetDesktopBackground(const AFileName: string);
var
ADeskTop: IActiveDesktop;
wallpaper: PwideChar;
begin ADeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
wallpaper := PwideChar(WideString(AFileName));
ADeskTop.SetWallpaper(wallpaper, 0);
ADeskTop.ApplyChanges(AD_APPLY_ALL);end;procedure RandomDesktopWall;
var
i: int64;
mStrList: TStrings;begin
mStrList := TStringList.Create; SearchFile(JPEGPath, mStrList);
mStrList.SaveToFile('C:\a.txt');
try
if mStrList.Count = 0 then
exit;
Randomize;
i := Random(mStrList.Count);
if FileExists(mStrList.Strings[i]) then
SetDesktopBackground(mStrList.Strings[i]);
finally
mStrList.Free;
end;end;var
MutexHandle: Cardinal;
//程序入口
begin
if OpenMutex(MUTEX_ALL_ACCESS, FALSE, MyMutex) <> 0 then
Exit; MutexHandle := CreateMutex(nil, TRUE, MyMutex); RandomDesktopWall; ReleaseMutex(MutexHandle);end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货