Войти

Показать полную графическую версию : [решено] Заставить скрипт расставлять по шаблону


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 проблема. Пока не могу сообразить как это сделать.

ferget
02-04-2012, 13:26
разбиваете строку

$aArray = StringSplit($command, '%', 0)

в $aArray[1] - имя значка

$aArray[2] - х

$aArray[3] - у

McLotos
02-04-2012, 13:46
ferget, я так и делал, но почему-то $array[2] выдаёт ошибку
А это сам фрагмент, который выдаёт ошибку
For $i = 1 To $sLines ; от 1 до количества строк в файле выполнять:
$command = FileReadLine($LogFile, $i)
$aArray = StringSplit($command, '%', 0)
MsgBox(0,"Test",$aArray[1] & $aArray[2] & $aArray[3])
Next
FileClose($LogFile)

ferget
02-04-2012, 13:52
начинать надо не с первой строки, а с четвертой, ведь у вас первые три строки Параметры дисплея, Разрешение, Формат
For $i = 4 To $sLines ;

McLotos
02-04-2012, 13:58
Блин, точно! Вот я чайник!
СПАСИБО!
тяжко писать первый скрипт на языке, который вообще не знаешь = )
а есть _GUICtrlListView_SetItemPosition по 64bit?

McLotos
02-04-2012, 15:34
Switch $aArray[1]
Case "Корзина"
_GUICtrlListView_SetItemPosition($aArray[1], 1, $aArray[2], $aArray[3])
EndSwitch
Почему не работает? =(

ferget
02-04-2012, 16:07
в функции _GUICtrlListView_SetItemPosition, первый аргумент HWND рабочего стола

McLotos
02-04-2012, 21:50
а что такое HWND? В гугле про него не написано.

ferget
02-04-2012, 21:57
не удачно написал
вот этот $hWnd
Local $hWnd = ControlGetHandle("Program Manager", "", "[CLASS:SysListView32; INSTANCE:1]")




© OSzone.net 2001-2012