McLotos
02-04-2012, 11:21
Продолжение темы Сохранение результата работы скрипта (http://forum.oszone.net/thread-231798.html)
#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>
$LogFile = @ScriptDir & "/Desktop.log" ;Переменная имени логфайла
$sp=@DesktopWidth & "X" & @DesktopHeight ;Текущее разрешение
$fo=@DesktopWidth/@DesktopHeight ;Соотношение сторон
$sLines = _FileCountLines($LogFile)
;Если файла не существует его нужно создать, и вбить в него информацию по текущему состоянию рабочего стола.
If Not FileExists($LogFile) Then
_FileCreate($LogFile)
GetPositions($sp,$fo)
ElseIf FileExists($LogFile) Then
For $i = 1 To $sLines ; от 1 до количества строк в файле выполнять:
$command = FileReadLine($LogFile, $i) ; читаем строку в файле
MsgBox(0,"Test",$command) ;выводим её на экран
Next
FileClose($LogFile) ;закрываем файл
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,$Position[$i][0] & "%" & $Position[$i][1] & "%" & $Position[$i][2] & @CRLF) ;Записываем полученные данные в файл
Next
EndFunc
В данные момент, скрипт работает так:
1. Проверить существование файла Desktop.log
Если его нет то:
2. Создать и записать в него всю нужную информацию.
Если он есть то:
3. Прочитать имя ярлыка
4. Найти его координаты в файле Desktop.log
5. Если текущие координаты ярлыка не совпадают с тем что записано в файле, то переместить ярлык в нужное место экрана.
Вот только с пунктами 4-5 проблема. Пока не могу сообразить как это сделать.
#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>
$LogFile = @ScriptDir & "/Desktop.log" ;Переменная имени логфайла
$sp=@DesktopWidth & "X" & @DesktopHeight ;Текущее разрешение
$fo=@DesktopWidth/@DesktopHeight ;Соотношение сторон
$sLines = _FileCountLines($LogFile)
;Если файла не существует его нужно создать, и вбить в него информацию по текущему состоянию рабочего стола.
If Not FileExists($LogFile) Then
_FileCreate($LogFile)
GetPositions($sp,$fo)
ElseIf FileExists($LogFile) Then
For $i = 1 To $sLines ; от 1 до количества строк в файле выполнять:
$command = FileReadLine($LogFile, $i) ; читаем строку в файле
MsgBox(0,"Test",$command) ;выводим её на экран
Next
FileClose($LogFile) ;закрываем файл
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,$Position[$i][0] & "%" & $Position[$i][1] & "%" & $Position[$i][2] & @CRLF) ;Записываем полученные данные в файл
Next
EndFunc
В данные момент, скрипт работает так:
1. Проверить существование файла Desktop.log
Если его нет то:
2. Создать и записать в него всю нужную информацию.
Если он есть то:
3. Прочитать имя ярлыка
4. Найти его координаты в файле Desktop.log
5. Если текущие координаты ярлыка не совпадают с тем что записано в файле, то переместить ярлык в нужное место экрана.
Вот только с пунктами 4-5 проблема. Пока не могу сообразить как это сделать.