我自己做根据图像目录,自动随机更换墙纸,用在有窗体的程序行,剥离窗口后,为什么能编译通过却得到效果?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.