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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Заставить скрипт расставлять по шаблону (http://forum.oszone.net/showthread.php?t=231874)

McLotos 02-04-2012 11:21 1891780

Заставить скрипт расставлять по шаблону
 
Продолжение темы Сохранение результата работы скрипта
Код:

#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 1891851

разбиваете строку

Код:

$aArray = StringSplit($command, '%', 0)
в $aArray[1] - имя значка

$aArray[2] - х

$aArray[3] - у

McLotos 02-04-2012 13:46 1891873

Вложений: 1
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 1891876

начинать надо не с первой строки, а с четвертой, ведь у вас первые три строки Параметры дисплея, Разрешение, Формат
Код:

For $i = 4 To $sLines ;

McLotos 02-04-2012 13:58 1891879

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

McLotos 02-04-2012 15:34 1891934

Switch $aArray[1]
Case "Корзина"
_GUICtrlListView_SetItemPosition($aArray[1], 1, $aArray[2], $aArray[3])
EndSwitch
Почему не работает? =(

ferget 02-04-2012 16:07 1891964

в функции _GUICtrlListView_SetItemPosition, первый аргумент HWND рабочего стола

McLotos 02-04-2012 21:50 1892190

а что такое HWND? В гугле про него не написано.

ferget 02-04-2012 21:57 1892194

не удачно написал
вот этот $hWnd
Код:

Local $hWnd = ControlGetHandle("Program Manager", "", "[CLASS:SysListView32; INSTANCE:1]")


Время: 18:44.

Время: 18:44.
© OSzone.net 2001-