Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Заставить скрипт расставлять по шаблону

Ответить
Настройки темы
[решено] Заставить скрипт расставлять по шаблону

Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Продолжение темы Сохранение результата работы скрипта
Код: Выделить весь код
#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 проблема. Пока не могу сообразить как это сделать.

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 11:21, 02-04-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$aArray = StringSplit($command, '%', 0)
в $aArray[1] - имя значка

$aArray[2] - х

$aArray[3] - у

Отправлено: 13:26, 02-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Безымянный.png
(45.9 Kb, 14 просмотров)

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)

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 13:46, 02-04-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


начинать надо не с первой строки, а с четвертой, ведь у вас первые три строки Параметры дисплея, Разрешение, Формат
Код: Выделить весь код
For $i = 4 To $sLines ;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:52, 02-04-2012 | #4


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Последний раз редактировалось McLotos, 02-04-2012 в 14:12.


Отправлено: 13:58, 02-04-2012 | #5


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 15:34, 02-04-2012 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:07, 02-04-2012 | #7


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 21:50, 02-04-2012 | #8


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


не удачно написал
вот этот $hWnd
Код: Выделить весь код
Local $hWnd = ControlGetHandle("Program Manager", "", "[CLASS:SysListView32; INSTANCE:1]")
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:57, 02-04-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Заставить скрипт расставлять по шаблону

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Офис и Текст - Печать документов по шаблону. DavyJohnes Программное обеспечение Windows 2 29-08-2011 22:20
Как заставить скрипт от Sanja Alone (oeminfo.cmd) видеть обновы с 9-тизначным номером JohnnyD Автоматическая установка Windows 2000/XP/2003 0 21-02-2011 12:03
Сортировка прокси по шаблону zbruy AutoIt 0 21-12-2010 01:12
[решено] Изменение голоса по шаблону S.T.R.E.L.O.K. Видео и аудио: обработка и кодирование 6 30-07-2010 14:23
putty как заставить крон запускать скрипт в назначенное время? E-mail Вебмастеру 3 30-09-2005 14:46




 
Переход