Войти

Показать полную графическую версию : [решено] Возможно ли сохранение результата работы скрипта?


McLotos
31-03-2012, 21:40
Доброго времени суток. Интересует один момент. Вот допустим имеется скрипт, который просматривает рабочий стол и вычисляет координаты каждого элемента рабочего стола. Подскажите куда копать, чтобы понять как научить скрипт сохранять полученные данные, а патом при необходимости восстанавливать. Я хочу сделать примерно так:
При первом запуске скрипт просто просматривает рабочий стол, и сохраняет полученную информацию, если запустить ещё раз, то скрипт проверит разницу и спросит что сделать: сохранить новый вариант или вернуться к старому. (готовые решения не предлагать = ) )
если уж учиться, то самому. Можете подсказать какие команды используются для работы с файлами? Интересует чтение, запись, сравнение, перезапись, замена, удаление.

ferget
31-03-2012, 23:46
Можете подсказать какие команды используются для работы с файлами? Интересует чтение, запись, сравнение, перезапись, замена, удаление. »
открываете справку AutoIt, раздел "Файлы, каталоги и диски"

McLotos
01-04-2012, 00:20
Точно. Хорошая идея! = )
Может на примере будет понятней что я хочу.

#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>

$LogFile = @ScriptDir & "/Desktop.log" ;Переменная имени логфайла
$sp=@DesktopWidth & "X" & @DesktopHeight ;Текущее разрешение
$fo=@DesktopWidth/@DesktopHeight ;Соотношение сторон

;Если файла не существует его нужно создать, и вбить в него информацию по текущему состоянию рабочего стола.
If Not FileExists($LogFile) Then
_FileCreate($LogFile)
GetPositions($sp,$fo)
ElseIf FileExists($LogFile) Then
;Здесь должна быть функция, которая прочитает существующий файл и расставит все значки так как они должны стоять.
EndIf

Func GetPositions($sp,$formula)

Local $hWnd = ControlGetHandle("Program Manager", "", "[CLASS:SysListView32; INSTANCE:1]")
If @error Then Return 0
Dim $Position[_GUICtrlListView_GetItemCount($hWnd)+1][3]
If Not IsArray($Position) Then Return 0
$Position[0][0] = UBound($Position) -1 ;Сколько значков на рабочем столе
FileWrite ($LogFile,"Параметры дисплея" & @CRLF & "Разрешение " & $sp & @CRLF & "Формат " & $fo & @CRLF);Записывам в файл информацию по дисплею.
;Запускаем цикл обработки массива

For $i = 1 To $Position[0][0] ;Начало счетчкика 1, конец счетчика - количество значков
$Position[$i][0] = _GUICtrlListView_GetItemText($hWnd, $i -1) ;Название значка
$Position[$i][1] = _GUICtrlListView_GetItemPositionX($hWnd, $i -1) ;X-позиция значка
$Position[$i][2] = _GUICtrlListView_GetItemPositionY($hWnd, $i -1) ;Y-позиция значка
FileWrite($LogFile, $i & ". " & $Position[$i][0] & ": " & $Position[$i][1] & " " & $Position[$i][2] & @CRLF) ;Записываем полученные данные в файл
Next
EndFunc

ferget
01-04-2012, 02:24
Может на примере будет понятней что я хочу. »
понятней не стало, если это смогли написать, то в чем проблема?

считываете строки из файла FileReadLine ( "filehandle/filename" [, line] )

разбиваете строки StringSplit ( "string", "delimiters" [, flag] )

расставляете значки _GUICtrlListView_SetItemPosition($hWnd, $iIndex, $iCX, $iCY)

McLotos
01-04-2012, 08:14
Просто это мой первый скрипт, я учу по ходу написания программы, ну в смысле понадобилась какая-то функция в гугл, мануал, написал, дальше опять, а вот про _GUICtrlListView_SetItemPosition($hWnd, $iIndex, $iCX, $iCY) я нигде ничего не видел.
Закончу, выложу полный скрипт

McLotos
02-04-2012, 07:07
Подскажите, почему при запуске скрипта в Win7 он не записывает в файл имена иконок, а только их координаты

ferget
02-04-2012, 08:32
win7 x32, скрипт, который в сообщении #3, записывает имена иконок

McLotos
02-04-2012, 09:15
всё ясно. он работает только на x32. а почему на 64 не срабатывает?




© OSzone.net 2001-2012