Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


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

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



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Аватара для Maza Faka

Ветеран


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

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


Creat0R
Помоги пожалуйста:
Код: Выделить весь код
$string = "Location: http://game.chirkom.uz/download/game/warcraft3/i_hate_this_key.zip [following]" & @CRLF & _
          "Checking..."

$result = StringRegExp($string, "http.*/(.*)\s", 1)

MsgBox(0, "", $result[0])
Пытаюсь получить подстроку i_hate_this_key.zip, но безуспешно.

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 10:21, 17-03-2008 | #261



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

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


Ветеран


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

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


Помогите разобраться с ListView. Хочу поймать выбор пункта в нем (желат по двойному клику) и не поумй как. Постоянно генерируется сообщение не давая даже сделать выбор.
Я так понимаю неправильна строка - Case $msg = $treeNets

Вот код.
Код: Выделить весь код
#include <GuiConstants.au3>
#include <GuiListView.au3>

$hGUI = GuiCreate("Nets", 1020, 620)
$AcceptButton = GUICtrlCreateButton("Ok",   880, 5, 60, 25)

$a = _NetAdapterGetProp()
        $treeNets = GUICtrlCreateListView("IP Adress        |Name nets",590,120,400,400,$LVS_SINGLESEL)
        _GUICtrlListViewSetColumnWidth ($treeNets, 0, 130)
        _GUICtrlListViewSetColumnWidth ($treeNets, 1, 470)
        Dim $hTreeNets[30]
        $n = UBound($a,2)
        For $i=0 To UBound($a,2)+1 Step 1
            $hTreeNets[$i]=GUICtrlCreateListViewItem($a[$i][1] & "|" & StringTrimLeft ($a[$i][0],11),$treeNets)
        Next

; GUI MESSAGE LOOP
GuiSetState()
While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $msg = $treeNets
         ;$adapters=GUICtrlGetState($treeNets)
         MsgBox(4096,"Info selected net", "List")
         ;GUICtrlGetState($treeNets))
    Case $AcceptButton
         ExitLoop
    EndSwitch
WEnd

Func _NetAdapterGetProp($sHostName = "localhost")
    Local $objItem, $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
    Local $sQuery = 'SELECT Index, Caption, MACAddress, IPAddress FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True'
    Local $colItems = $objWMIService.ExecQuery($sQuery, "WQL", 0x30)
    If IsObj($colItems) Then
        Local $aRes[1][3], $i=0
        For $colItem In $colItems
            ReDim $aRes[$i+1][3]
            $aRes[$i][0] = $colItem.Caption
            $aRes[$i][1] = $colItem.IPAddress(0)
            $aRes[$i][2] = $colItem.MACAddress
            $i+=1
        Next
        Return $aRes
    EndIf
    Return SetError(1)
EndFunc  ;==> _NetAdapterGetProp
Exit

Отправлено: 12:25, 17-03-2008 | #262


Аватара для Maza Faka

Ветеран


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

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


NikLok
Не считая ошибок с массивом и ошибок, которых я не заметил- не нашёл...
Код: Выделить весь код

While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $msg = $treeNets
         ;$adapters=GUICtrlGetState($treeNets)
         MsgBox(4096,"Info selected net", "List")
Здесь ошибка указания значения, правильно будет так:
Код: Выделить весь код
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $treeNets
            ;$adapters=GUICtrlGetState($treeNets)
            MsgBox(4096,"Info selected net", "List")
Как я понял ты используешь старую версию AutoIt-а, попробуй этот код:
Код: Выделить весь код
#include <GuiConstants.au3>
#include <GuiListView.au3>

;Global Const $WM_NOTIFY = 0x004E
;Global Const $tagNMHDR = "hwnd hWndFrom;int IDFrom;int Code"
;Global Const $NM_DBLCLK = -3

$hGui = GUICreate("Test GUI", 300, 200)

$hListView = GUICtrlCreateListView("Items|SubItems", 10, 10, 280, 180)

GUICtrlSendMsg(-1, 0x101E, 0, 150)
GUICtrlSendMsg(-1, 0x101E, 1, 125)

$Item1 = GUICtrlCreateListViewItem("Item1|SubItem1", $hListView)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $tNMHDR, $IdFrom, $iCode

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $IdFrom = DllStructGetData($tNMHDR, "IdFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $IdFrom
        Case $hListView
            Switch $iCode
                Case $NM_DBLCLK
                    ConsoleWrite("Double click" & @LF)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
Если будет ругаться на необьявленные переменные - раскомментируй закоментированные строчки.

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 13:34, 17-03-2008 | #263


Ветеран


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

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


Maza Faka,

Цитата Maza Faka:
Case $msg = $treeNets »
Да это глупая очепятка! Ночью надо отдыхать а не код гнать!

Цитата Maza Faka:
Как я понял ты используешь старую версию AutoIt-а, »
Уже выровнял! А по какому признаку заключение - по отсутсвию подчеркивания в _GUICtrlListView_SetColumnWidth ?
Цитата Maza Faka:
Если будет ругаться на необьявленные переменные - раскомментируй закоментированные строчки. »
Все прекрасно работает, только вот не понял как понять какой из N итемов выбран!

Отправлено: 15:05, 17-03-2008 | #264


Аватара для Maza Faka

Ветеран


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

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


Цитата NikLok:
Да это глупая очепятка! Ночью надо отдыхать а не код гнать! »
Бывает
Цитата NikLok:
А по какому признаку заключение - по отсутсвию подчеркивания в _GUICtrlListView_SetColumnWidth ? »
Ага
Цитата NikLok:
не понял как понять какой из N итемов выбран! »
Код: Выделить весь код
#include <GuiConstants.au3>
#include <GuiListView.au3>

;Global Const $WM_NOTIFY = 0x004E
;Global Const $tagNMHDR = "hwnd hWndFrom;int IDFrom;int Code"
;Global Const $NM_DBLCLK = -3
;Global Const $tagNMLISTVIEW = "hwnd hWndFrom;int IDFrom;int Code;int Item;int SubItem;int NewState;int OldState;int Changed;" & _
        ;"int ActionX;int ActionY;int Param"

$hGui = GUICreate("Test GUI", 300, 200)

$hListView = GUICtrlCreateListView("Items|SubItems", 10, 10, 280, 180)

GUICtrlSendMsg(-1, 0x101E, 0, 150)
GUICtrlSendMsg(-1, 0x101E, 1, 125)

$Item1 = GUICtrlCreateListViewItem("Item1|SubItem1", $hListView)
$Item2 = GUICtrlCreateListViewItem("Item2|SubItem2", $hListView)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $tNMHDR, $IdFrom, $iCode, $tInfo, $iItem

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $IdFrom = DllStructGetData($tNMHDR, "IdFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $IdFrom
        Case $hListView
            Switch $iCode
                Case $NM_DBLCLK
                    $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
                    $iItem = DllStructGetData($tInfo, "Item")
                    If $iItem <> -1 Then ConsoleWrite("Double click on " & $iItem & " item" & @LF)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
Всё это описано в справке, не ленись туда заглядывать

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:00, 17-03-2008 | #265


Ветеран


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

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


Maza Faka,
Цитата Maza Faka:
Всё это описано в справке, не ленись туда заглядывать »
Да у меня, пока не накоплена критическая масса знаний, барьер вхождения в тему. То есть в руководство смотрю а мысли то ли ошибочные то ли отсутствуют.

Извини исчо вопрос:
Код: Выделить весь код
$iItem = DllStructGetData($tInfo, "Item")
Смотрел описание GUICtrlCreateListView а так же GuiCtrlCreateListView и уж само собой DllStructGetData.
Так там нигде не описано что такое "Item". Ну интуитивно понятно название.
Теперь же мне нужно значение значение этого итема. А они у нас не в массиве а $Item1 $Item2 ......
Как теперь выбрать нужный? И кстати каково его мнемоническое название?!
Чуствую что нужно использовать _GUICtrlListView_GetItem но как его увязать в функции ....
Тем более что не могу понять а эти строки зачем?
Код: Выделить весь код
     $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $IdFrom = DllStructGetData($tNMHDR, "IdFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

Отправлено: 16:37, 17-03-2008 | #266


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
Пытаюсь получить подстроку i_hate_this_key.zip
Замени \s на реальный пробел, \s подбирает не только пробел

Кстати http:// можно не указывать:

Код: Выделить весь код
$string = "Location: http://game.chirkom.uz/download/game/warcraft3/i_hate_this_key.zip [following]" & @CRLF & "Checking..."

$result = StringRegExpReplace($string, "(?s)^.*/(.*) .*$", "\1")

MsgBox(0, "", $result)
NikLok,
Цитата:
нигде не описано что такое "Item"
Это параметр в структуре, ему присваивается значение при создании структуры на событии двойного нажатия по айтему. Есть также в этой структуре ещё параметры:

Код: Выделить весь код
$tagNMLISTVIEW = "hwnd hWndFrom;int IDFrom;int Code;int Item;int SubItem;int NewState;int OldState;int Changed;int ActionX;int ActionY;int Param"
К примеру «OldState» возвращает состояние элемента до нажатия на него. ActionX/Y вернёт координаты места нажатия по элементу.

Цитата:
Теперь же мне нужно значение значение этого итема
Код: Выделить весь код
ConsoleWrite("Double click on [" & _GUICtrlListView_GetItemText($IdFrom, $iItem) & "] item" & @LF)
Цитата:
не могу понять а эти строки зачем?
$tNMHDR переменная содержит созданную структуру для получения идентификаторов событий и элементов.
$IdFrom идентификатор элемента который вызвал событие (эквивалентно $hListView).
$iCode код события (при двойном клике в списке он ровняется $NM_DBLCLK).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:22, 17-03-2008 | #267


Ветеран


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

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


Creat0R, Maza Faka, Вот еще забыл спросить а строки:
Код: Выделить весь код
GUICtrlSendMsg(-1, 0x101E, 0, 150)
GUICtrlSendMsg(-1, 0x101E, 1, 125)
Для чего нужны? И как узнать то когда нужно посылать сообщ а когда нет! И какие именно!??

Отправлено: 17:38, 17-03-2008 | #268


Аватара для Creat0R

Must AutoIt


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

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


NikLok,
Цитата:
Для чего нужны? И как узнать то когда нужно посылать сообщ а когда нет!
Эти строки для определения ширены колонок. Maza Faka, имо, плохая идея использовать значения вместо констант - при большом объеме кода можно долго сидеть пытаясь понять что же за такое магическое значение

Если использовать GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, -1) то колонка (первая, это определяет 0 в третьем параметре) выровняется по максимуму (чтобы были видны все символы в айтемах).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 18:01, 17-03-2008 | #269


Аватара для Maza Faka

Ветеран


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

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


Цитата NikLok:
а строки:
GUICtrlSendMsg(-1, 0x101E, 0, 150)
GUICtrlSendMsg(-1, 0x101E, 1, 125)
Для чего нужны? »
Это для указания ширины колонок, аналог функции _GUICtrlListView_SetColumnWidth
Цитата NikLok:
И как узнать то когда нужно посылать сообщ а когда нет! И какие именно!?? »
Ты имеешь в виду сообщения Windows? Для элемента ListView это WM_NOTIFY. Для например элемента Button это WM_COMMAND.

Цитата Creat0R:
Замени \s на реальный пробел, \s подбирает не только пробел »
Вот спасибо, а то замучился совсем Кстати, что означает параметр замены "\1", в справке не нашёл.
Цитата Creat0R:
имо, плохая идея использовать значения вместо констант »
Знаю и сам никогда так не делаю, просто поторопился

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 18:04, 17-03-2008 | #270



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход