PDA

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Vadikan
05-02-2006, 00:02
Внимание!

В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно :) Заголовок темы должен быть осмысленным.[hr]

http://www.autoitscript.com/images/autoit_6_240x100.jpg
Сайт программы (http://www.hiddensoft.com/autoit3/)
Русская справка (http://www.autoitscript.com/autoit3/docs.shtml)
Коллекция AutoIt скриптов (http://sanjaalone.h15.ru/) от Sanja Alone (http://forum.oszone.net/member.php?userid=28800)
Коллекция AutoIt скриптов (http://www.msfn.org/board/index.php?showtopic=20197) от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (http://www.dx21.com/scripting/rundll32/refguide.asp) (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (http://oszone.net/display.php?id=3663) (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt (http://forum.oszone.net/forumdisplay.php?f=61&filter_string=%C0%F0%F5%E8%E2+-+%F7&filter_by=title) или они же в 7z архиве (версии для печати) - 846 кб (http://tools.oszone.net/Vadikan/forum_archives/autoit_threads_archive.7z) (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


[hr]Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений" (http://forum.oszone.net/announcement.php?f=61&announcementid=43). Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров (http://forum.oszone.net/announcement.php?f=32&announcementid=24).[hr]В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki (http://wiki.oszone.net) по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit (http://wiki.oszone.net/index.php/Категория:AutoIt). Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

gregaz
15-01-2008, 17:19
В этой функции нужно проверять $wParam, оно будет ровняться идентиикатору ListView, BitAND($wParam, 0xFFFF) вернёт идентификатор конкретного элемента (ListViewItem). »

Подскажи как выполнить .Моя попытка не увенчалась успехом :
Это чуть измененный пример от Maza Faka (пост 1969)
#include <GuiConstants.au3>
#include <GuiListView.au3>

$Gui = GUICreate("Test", 800, 400)

$hListView1 = _GUICtrlListView_Create($GUI, "Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
$ListItem1 = _GUICtrlListView_AddItem($hListView1, "Item1")
$ListItem2 = _GUICtrlListView_AddItem($hListView1, "Item2")

$hListView2 = _GUICtrlListView_Create($GUI, "Items|SubItems", 402, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView2, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
$ListItem3 = _GUICtrlListView_AddItem($hListView2, "Item3")
$ListItem4 = _GUICtrlListView_AddItem($hListView2, "Item4")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hListView= BitAND($iwParam, 0xFFFF); Попытка идентификации ListView ??
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")

Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_BEGINLABELEDIT
Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
Return False
Case $LVN_ENDLABELEDIT
Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
If StringLen(DllStructGetData($tBuffer, "Text")) Then Return True
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc

Creat0R
15-01-2008, 17:23
Timurko, немного подправил, так чтобы лишние пробелы уберались и время выглядило такого формата \d\d (передача)
Ещё один цикл для этого вроде не нужен...

если в файле с программой присутствуют названия каналов то они тут просто удаляются
Можно проверять наличие формата времени:

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

$String = FileRead(@ScriptDir & "\source1.txt")

Dim $aStrArray = StringSplit(StringStripCR($String), @LF)
Dim $aNewArray[1]

For $i = 1 To $aStrArray[0]
$sTVShow_Name = StringStripWS(StringRegExpReplace($aStrArray[$i], "((, |)\d\d:\d\d)", ""), 3)
$aTVShow_Time = StringRegExp($aStrArray[$i], "(\d\d:\d\d)", 3)
$iUbound = UBound($aTVShow_Time)-1

If $iUbound < 0 Then
$aNewArray[0] += 1
ReDim $aNewArray[$aNewArray[0] + 1]
$aNewArray[$aNewArray[0]] = $aStrArray[$i]
ContinueLoop
EndIf

For $j = 0 To $iUbound
$aNewArray[0] += 1
ReDim $aNewArray[$aNewArray[0] + 1]

$sSeperater = " - "
If StringLeft($sTVShow_Name, 1) = "-" Then $sSeperater = " "
$aNewArray[$aNewArray[0]] = StringStripWS($aTVShow_Time[$j], 3) & $sSeperater & $sTVShow_Name
Next
Next

_ArraySort($aNewArray, 0, 1)
_ArrayDisplay($aNewArray)
_FileWriteFromArray(@ScriptDir & "\dest1.txt", $aNewArray, 1)

gregaz,
Подскажи как выполнить

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView1, $hWndListView2

$hWndListView1 = $hListView1
$hWndListView2 = $hListView2

If Not IsHWnd($hListView1) Then $hWndListView1 = GUICtrlGetHandle($hListView1)
If Not IsHWnd($hListView2) Then $hWndListView2 = GUICtrlGetHandle($hListView2)

$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")

Switch $hWndFrom
Case $hWndListView1 ;распознан первый список
ConsoleWrite("--> ListView 1 events here" & @LF)
;~ Switch $iCode
;~ Case ;;;
;~ EndSwitch
Case $hWndListView2 ;распознан второй список
ConsoleWrite("--> ListView 2 events here" & @LF)
;~ Switch $iCode
;~ Case ;;;
;~ EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY

gregaz
15-01-2008, 18:01
Creat0R, Спасибо , так работает
Вопрос : Где можно почитать про Dll-библиотеки ?

unikum111
15-01-2008, 18:50
Подскажите пожалуйста, как в скрипте команды командной строки прописывать, например, "copy /y" и т.д.? Не охота дополнительный файл cmd делать.

Creat0R
15-01-2008, 22:43
gregaz,
Где можно почитать про Dll-библиотеки ?
Смотря что требуется, но вообще должна быть документаця к той или инной библиотеке :)

unikum111,
как в скрипте команды командной строки прописывать
Run(@ComSpec & ' /c copy /y "source" "dest"', '', @SW_HIDE)

А не проще на AutoIt сделать то, что планируется с использованием Cmd? :)

Timurko
16-01-2008, 10:26
Цитата:
если в файле с программой присутствуют названия каналов то они тут просто удаляются
Можно проверять наличие формата времени: »

Хм... Вот в этом то и проблема. В таком случае получается он сортирует все подряд и из такого:
TV1000
05:00, 23:00 Я и ты, и все, кого мы знаем
07:00 Грязные делишки
09:00 Суперзвезда
11:00 Девушка на мосту
13:00 Сердце и души
15:00 Звездная ночь
17:00 Сердцеедки
19:00 Осиное гнездо
21:00 Ирландский Квартал
01:00 Белокурые бестии
03:00 Голубой воротничок
РБК
07:00-15:00 Профилактика на канале РБК.
15:00-06:30 Новости. Каждые 30 минут.
15:10, 16:10, 17:10, 18:15, 20:10, 21:10, 00:15, 03:10, 04:10 Рынки.
15:35, 19:35 Новости компаний.
15:50, 18:50, 04:20 Звездная пыль.
16:20 В фокусе. Рынок мясопереработки.
17:20, 23:50, 01:20 Отдых и Туризм.
17:35 Капитал. Банковские вклады: перспективы роста?
18:35 Рынки. Спецвыпуск. Открытие торгов в Америке.
19:10 Рынки. Спецвыпуск. Итоги торгов в России.
19:50, 03:20 Азбука инвестора.
20:35 Рекламная пауза.
21:35, 03:35 Диалог. "Конвертная" борьба.
22:10, 02:10 Интрига дня.
23:00, 01:30 Мир сегодня.
23:35 Зарубежный бизнес.
00:35, 04:35 Сфера интересов. Ювелирные торговые сети.
01:10 Рынки. Спецвыпуск. Итоги торгов в Америке.

Получается такой текст:
00:15 - Рынки.
00:35 - Сфера интересов. Ювелирные торговые сети.
01:00 - Белокурые бестии
01:10 - Рынки. Спецвыпуск. Итоги торгов в Америке.
01:20 - Отдых и Туризм.
01:30 - Мир сегодня.
02:10 - Интрига дня.
03:00 - Голубой воротничок
03:10 - Рынки.
03:20 - Азбука инвестора.
03:35 - Диалог. "Конвертная" борьба.
04:10 - Рынки.
04:20 - Звездная пыль.
04:35 - Сфера интересов. Ювелирные торговые сети.
05:00 - Я и ты, и все, кого мы знаем
06:30 - Новости. Каждые 30 минут.
07:00 - Грязные делишки
07:00 - Профилактика на канале РБК.
09:00 - Суперзвезда
11:00 - Девушка на мосту
13:00 - Сердце и души
15:00 - Звездная ночь
15:00 - Новости. Каждые 30 минут.
15:00 - Профилактика на канале РБК.
15:10 - Рынки.
15:35 - Новости компаний.
15:50 - Звездная пыль.
16:10 - Рынки.
16:20 - В фокусе. Рынок мясопереработки.
17:00 - Сердцеедки
17:10 - Рынки.
17:20 - Отдых и Туризм.
17:35 - Капитал. Банковские вклады: перспективы роста?
18:15 - Рынки.
18:35 - Рынки. Спецвыпуск. Открытие торгов в Америке.
18:50 - Звездная пыль.
19:00 - Осиное гнездо
19:10 - Рынки. Спецвыпуск. Итоги торгов в России.
19:35 - Новости компаний.
19:50 - Азбука инвестора.
20:10 - Рынки.
20:35 - Рекламная пауза.
21:00 - Ирландский Квартал
21:10 - Рынки.
21:35 - Диалог. "Конвертная" борьба.
22:10 - Интрига дня.
23:00 - Мир сегодня.
23:00 - Я и ты, и все, кого мы знаем
23:35 - Зарубежный бизнес.
23:50 - Отдых и Туризм.
TV1000
РБК

Creat0R
17-01-2008, 00:06
Timurko,
В таком случае получается он сортирует все подряд
Знаю, хотел подметить это, но забыл :)

идеалов в жизни не бывает ;)

Попробую подправить...

Creat0R
17-01-2008, 00:38
Попробую подправить...
Подправил, пришлось добавить ещё массив и цикл, а также по понятным причинам, строки не могут оставаться на своих местах, они смещаются в зависимости от сортировки и наличия разных значении времени...

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

$String = FileRead(@ScriptDir & "\source1.txt")

Dim $aStrArray = StringSplit(StringStripCR($String), @LF)
Dim $aNewArray[1], $aChanelsArray[1][1]

For $i = 1 To $aStrArray[0]
$sTVShow_Name = StringStripWS(StringRegExpReplace($aStrArray[$i], "((, |)\d\d:\d\d)", ""), 3)
$aTVShow_Time = StringRegExp($aStrArray[$i], "(\d\d:\d\d)", 3)
$iUbound = UBound($aTVShow_Time)-1

If $iUbound < 0 Then
$aChanelsArray[0][0] += 1
ReDim $aChanelsArray[$aChanelsArray[0][0] + 1][2]
$aChanelsArray[$aChanelsArray[0][0]][0] = $i
$aChanelsArray[$aChanelsArray[0][0]][1] = $aStrArray[$i]
ContinueLoop
EndIf

For $j = 0 To $iUbound
$aNewArray[0] += 1
ReDim $aNewArray[$aNewArray[0] + 1]

$sSeperater = " - "
If StringLeft($sTVShow_Name, 1) = "-" Then $sSeperater = " "
$aNewArray[$aNewArray[0]] = StringStripWS($aTVShow_Time[$j], 3) & $sSeperater & $sTVShow_Name
Next
Next

_ArraySort($aNewArray, 0, 1)

For $i = 1 To UBound($aChanelsArray)-1
$aNewArray[0] += 1
_ArrayInsert($aNewArray, $aChanelsArray[$i][0], $aChanelsArray[$i][1])
Next

_ArrayDisplay($aNewArray)
_FileWriteFromArray(@ScriptDir & "\dest1.txt", $aNewArray, 1)

Maza Faka
18-01-2008, 10:09
Creat0R
Привет! Подскажи пожалуйста: есть строка вида ". 51% 4.89 KB/s", нужно получить массив со значениями 51% и 4.89 KB/s. Так же нужно учесть, что в конце исходной строки может быть любой символ после 4.89 KB/s, который нужно опустить.
Мои потуги: :)
#include <Array.au3>

$string = ". 51% 4.89 KB/s"

$aString = StringRegExp($string, "(\d+%)(.*s)", 3)

_ArrayDisplay($aString)
Как видишь не совсем то, что нужно.

Creat0R
18-01-2008, 11:12
Maza Faka, нужно получить массив со значениями 51% и 4.89 KB/s

Так:

#include <Array.au3>

$string = ". 51% 4.89 KB/s"

$aString = StringRegExp($string, "(\d+%)[^\d]+(.*/s).*$", 3)

_ArrayDisplay($aString)

?

Правда это ещё зависит от того, где будет располагаться второе значение по отношению первого, т.е если совсем вместе, то массив не получится, это можно обойти если заранее известен формат второго значения, будет ли постоянно цифра -> точка - > цифра, или будет меняться...

Maza Faka
18-01-2008, 12:18
Creat0R
Спасибо! Это именно то, что мне нужно! ;)

rimm
18-01-2008, 20:54
Такая проблема , как в Internet Explorer скопировать выделенный фрагмент текста??
Заранее благодарен

Creat0R
18-01-2008, 22:59
rimm,
как в Internet Explorer скопировать выделенный фрагмент текста?
Send("^{INSERT}") ? :)

rimm
19-01-2008, 02:13
Send("^{INSERT}") ? »
Большое спасибо

gregaz
19-01-2008, 23:48
При выполнении операции сортировки в ListView иконки остаются на месте
Как обеспечить их привязку к типу файла ,а не к индексу Item ?

#include <GuiConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>

$Gui = GUICreate("Test", 300, 200)

$hListView = _GUICtrlListView_Create($GUI, "Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))

$hImage = _GUIImageList_Create (16,16,5); 5-ФОН ОКНА
_GUIImageList_AddIcon ($hImage, "shell32.dll", 3);Папка -0
_GUIImageList_AddIcon ($hImage, "shell32.dll", 0);Текстовый файл -2
_GUICtrlListView_SetImageList ($hListView, $hImage, 1)

$ListItem1 = _GUICtrlListView_AddItem($hListView, "Item1",0)
$ListItem2 = _GUICtrlListView_AddItem($hListView, "Item2",1)
$ListSubItem1 = _GUICtrlListView_AddSubItem ($hListView, 0,'1', 1)
$ListSubItem1 = _GUICtrlListView_AddSubItem ($hListView, 1,'2', 1)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($hListView) ];Кол-во колонок

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")

Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; Клик по колонке
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort ($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
Case $LVN_BEGINLABELEDIT
Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
Return False
Case $LVN_ENDLABELEDIT
Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
If StringLen(DllStructGetData($tBuffer, "Text")) Then Return True
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc

Maza Faka
20-01-2008, 08:11
gregaz
В справке есть пример, смотри функцию GUICtrlRegisterListViewSort()

Maza Faka
20-01-2008, 09:31
Самому стало интересно и спросил (http://www.autoitscript.com/forum/index.php?showtopic=62164&view=findpost&p=465737) на офф. форуме. ;)

Creat0R
20-01-2008, 16:27
Maza Faka,
Я не думал что в новой версии это будет проще чем раньше :)
Кстати, с $LVS_EX_CHECKBOXES тоже отлично сортирует.

gregaz
20-01-2008, 19:35
gregaz
В справке есть пример, смотри функцию
Код:
GUICtrlRegisterListViewSort() »

Maza Faka , Спасибо большое.
Значит для сортировки надо использовать отдельную ф-ю ?
Для редактирования на месте и управления кликами еще одну.
А может проще завести иконки отдельной 0-й колонкой(без текста)и использовать одну ф-ию?




© OSzone.net 2001-2012