Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   Вопрос по JavaScript (http://forum.oszone.net/showthread.php?t=58101)

Debugger 15-12-2005 16:05 383431

Вопрос по JavaScript
 
Имеется следующий скрипт, который запускается в конце установки Windows и устанавливает случайную картинку в качестве обоев (если кому надо, пользуйтесь, только распакуйте вложение в папку со скриптом):

Код:

var SourceDir, FileTypes, ft, FileList,n1,counter,GlSeed;
// скрипт для выбора случайной картинки и установки ее в качестве обоев
// (c) MarsDen 2005
// параметры задаются ниже
// SourceDir = "C:\Bitmaps" - папка, в которой лежат картинки
SourceDir = "c:\\Documents and Settings\\Администратор\\Мои документы\\Мои рисунки\\";
// FileTypes = список типов файлов, через точку, в верхнем регистре,
// только тогда гарантируется полный перебор всех файлов
FileTypes = 'BMP.JPG';
// в результате выполнения скрипта формируется файл-копия в папке %SystemRoot%
// с имененм JS_WallPaper.ext, где ext - текущее расширение файла
// и вносятся записи в реестр с указанием новых обоев

function ReadFoldersCount(SD){
var fso, f, fc, fc1, s, s1, cnt;
  cnt=0;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  //WScript.Echo(SourceDir);
  f = fso.GetFolder(SD);
  fc = new Enumerator(f.SubFolders);
  fc1 = f.SubFolders;

  s = "";
  for (; !fc.atEnd(); fc.moveNext())
  {
    s += fc.item();
    s += "\n";
    s1 = fc.item();
    cnt += ReadFoldersCount(s1);
  }
  cnt += fc1.Count;
  return cnt;
}

function ReadFilesCount(SD){
var fso, f, fc, fc1, s, s1, s2, cnt, nn,nn1;
  if(!SD){return 0}
  cnt=0;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  //WScript.Echo(SD);
  f = fso.GetFolder(SD);
  fc = new Enumerator(f.SubFolders);
  fc1 = f.SubFolders;
  s = "";
  for (; !fc.atEnd(); fc.moveNext())
  {
    s += fc.item();
    s += "\n";
    s1 = fc.item();
    cnt += ReadFilesCount(s1);
  }
  fc = new Enumerator(f.files);
  fc1 = f.files;
  for (; !fc.atEnd(); fc.moveNext())
  {
    s = fc.item();
    s = SD+"\\"+s.name;
    s1=s.toUpperCase();

    for(nn=0;nn<ft.length;nn++){
      s2 = ft[nn];
      if(!(s2=='')){
        if(s1.lastIndexOf(s2)==s1.length-s2.length){
            FileList[FileList.length] = s;
        }
      }
    }
    //cnt += ReadFilesCount(s1);
  }
  cnt += fc1.Count;
  return cnt;
}


ft = FileTypes.split('.');
FileList = new Array();
ReadFilesCount(SourceDir);
var nn = parseInt((FileList.length * Math.random()) + 1);
var s = FileList[nn];
nn = s.lastIndexOf('.');
var s1 = s.substring(nn+1,s.length)
//WScript.Echo(s+" nn = "+nn+" s1 = "+s1);

var WSHShell = WScript.CreateObject("WScript.Shell");
var WinDir = WSHShell.ExpandEnvironmentStrings("%SystemRoot%");
var fso = new ActiveXObject("Scripting.FileSystemObject");

var s2=WinDir+"\\JS_Wallpaper."+s1;
var s3=WinDir+"\\JS_Wallpaper.bmp";



fso.CopyFile(s, s2);
if(s2.toUpperCase()!=s3.toUpperCase()){
  var s4 = 'jpgtobmp.exe "'+s2+'" "'+s3+'"';
  WSHShell.Run(s4)
}

var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.RegWrite("HKCU\\Control Panel\\Desktop\\TileWallpaper", "0");
WSHShell.RegWrite("HKCU\\Control Panel\\Desktop\\Wallpaper", s3);
WSHShell.RegWrite("HKCU\\Control Panel\\Desktop\\WallpaperStyle", "2");

Вопрос к гуру: как его изменить, чтобы вместо прямых путей можно было бы подставить переменные окружения?


Время: 13:41.

Время: 13:41.
© OSzone.net 2001-