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

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

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


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

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



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

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

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

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

 

Аватара для Creat0R

Must AutoIt


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

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


Davlet,
Цитата:
Не получилось, таже ситуации.
А если так:

Код: Выделить весь код
Opt("WinTitleMatchMode", 2)

BlockInput(1)

Run("notepad")
WinWaitActive("- Notepad")
Send("Test")

BlockInput(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


Отправлено: 22:58, 26-10-2007 | #641



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

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


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Ты приводил функцию для получения контроля по идентификатору, я вот пытаюсь сделать нечто похожее, но для Handle от контроля GUI (аутоита)... типа такого:

Код: Выделить весь код
Func _HwndToID($hwnd)
    Local $iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hwnd)
    Return $iRet[0]
EndFunc
По сути это нужно для того, чтобы можно было на _GuiCtrlTreeViewInsertItem повесить событие - т.е там возвращается handle на вставлены пункт, а мне нужен Id, вот и пытаюсь конвертировать, но почему то всегда эта функци возвращает 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


Отправлено: 01:59, 27-10-2007 | #642


Googler


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

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


Цитата Creat0R:
там возвращается handle на вставлены пункт, а мне нужен Id »
дык "вставленый пункт" не является контролом, поэтому и полученный хэндл не является хэндлом окна... посмотри хоть через "Window Info"... это какая-то внутренняя нумерация которую ведет для себя сам контрол... кстати, посмотри текст функции _GUICtrlTreeViewInsertItem() - она по сути лишь враппер для сообщения $TVM_INSERTITEM, отправляемого контролу SysTreeView32.
Цитата Creat0R:
чтобы можно было на _GuiCtrlTreeViewInsertItem повесить событие »
смысл?.. ведь вставка элемента является синхронным событием (в отличие скажем от нажатия на кнопку) и скрипт всегда знает когда оно случилось... т.е. вставку можно произвести только через вызов определенной функции

Отправлено: 09:22, 27-10-2007 | #643


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
смысл?
Как смысл , мне нужно отслеживать нажатия на определённый элемент TreeView, и соответствено делать что-то (к примеру получить текст выбранного контроля, но не только).

Я это сделал через CallBack, т.е просто тупо вызывается определённая функция каждые 100 мс., она и проверяет текст выбранного элемента (через _GuiCtrlTreeViewGetTree()), но хотелось обойтись без CallBack или другой постоянной проверкой (пусть то в цикле или в зарегистрированном сообщении через GuiRegisterMsg()) - просто есть и другие задачи для главного цикла, и не хочется нагружать его слишком много и/или вызывать несколько подобных циклов.

P.S
Я про событие как через GuiCtrlSetOnEvent(), не событие самой вставки

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

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

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


Отправлено: 10:25, 27-10-2007 | #644


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

Ветеран


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

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


Creat0R
Видно не получится при помощи API вернуть ID TreeViewItem.
Наверное потому, что даже утилита AutoIt Window Info не показывает класс и instance TreeViewItem, а вот например с контроль Button идентификатор возвращается:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <GuiTreeView.au3>
Opt("GuiOnEventMode", 1)

$gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")

$treeView = GUICtrlCreateTreeView(20, 10, 200, 150, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
$all = GUICtrlCreateTreeViewItem("All", $treeView)
GUICtrlCreateTreeViewItem("One", $all)

$button = GUICtrlCreateButton("Insert", 240, 10, 50, 25)
GUICtrlSetOnEvent(-1, "HwndToID")
GUISetState()

While 1
    Sleep(200)
WEnd

Func OnExit()
    Exit
EndFunc

Func HwndToID()
    $insert = _GUICtrlTreeViewInsertItem($treeView, "Inserted")
    $handle = GUICtrlGetHandle($button)
    MsgBox(0, "Handle", $handle)
    $iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $handle)
    MsgBox(0, "ID", $iRet[0])
EndFunc

Отправлено: 10:36, 27-10-2007 | #645


Аватара для Creat0R

Must AutoIt


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

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


Вот что я имел в виду:

Код: Выделить весь код
#include <GUIConstants.au3>
#include <GuiTreeView.au3>
Opt("GuiOnEventMode", 1)

$Gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")

$TreeView = GUICtrlCreateTreeView(20, 20)

$hItem = _GUICtrlTreeViewInsertItem($TreeView, "Inserted")
$TV_ID = HwndToID($hItem)

; Закомментируем две предыдущие строчки, а ту то чуть ниже раскомментируем, и получем то что нужно при нажатии на пункт
; (но с ограничением в количестве создаваемых элементов)
;$TV_ID = GUICtrlCreateTreeViewItem("Inserted", $TreeView)

GUICtrlSetOnEvent($TV_ID, "TV_Event")

GUISetState()

While 1
    Sleep(100)
WEnd

Func TV_Event()
    ConsoleWrite("Ok, we have clicked tv item")
EndFunc

Func OnExit()
    Exit
EndFunc

Func HwndToID($hID)
    $iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hID)
    Return $iRet[0]
EndFunc

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

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

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


Отправлено: 11:06, 27-10-2007 | #646


Googler


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

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


Цитата Creat0R:
Вот что я имел в виду »
все равно не понимаю - что мешает вставить в TV_Event() тот же _GUICtrlTreeViewGetTree(), определяющий какую ветку кликнули, а затем Switch вызывающий действие в зависимости от типа ветки?... и никаких циклов

Отправлено: 12:10, 27-10-2007 | #647


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
что мешает вставить в TV_Event() тот же _GUICtrlTreeViewGetTree(), определяющий какую ветку кликнули
А как будет распознаваться что был кликнут пункт в TreeView? (без постоянной проверки)

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

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

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


Отправлено: 12:14, 27-10-2007 | #648


Googler


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

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


Creat0R
распознается клик на TreeView, а сам пункт "вычисляем" в функции-обработчике... ведь клик на TreeView это всегда клик на каком-то элементе?

Отправлено: 12:21, 27-10-2007 | #649


Аватара для Creat0R

Must AutoIt


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

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


Цитата:
ведь клик на TreeView это всегда клик на каком-то элементе?
Во-первых не всегда, можно ведь кликнуть в пустом месте

Но не в этом дело, ведь если поставить событие для TreeView, то оно не срабатывает как таковое:

Код: Выделить весь код
#include <GUIConstants.au3>
#include <GuiTreeView.au3>
Opt("GuiOnEventMode", 1)

$Gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")

$TreeView = GUICtrlCreateTreeView(20, 20)
GUICtrlSetOnEvent($TreeView, "TV_Event")

$hItem = _GUICtrlTreeViewInsertItem($TreeView, "Inserted")

GUISetState()

While 1
    Sleep(100)
WEnd

Func TV_Event()
    ConsoleWrite("Ok, we have clicked tv item")
EndFunc

Func OnExit()
    Exit
EndFunc
Или что-то другое имеется в виду? покажи плиз на примере.

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

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

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


Отправлено: 12:49, 27-10-2007 | #650



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 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




 
Переход