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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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 | Цитировать


Diamond,
Цитата:
Кто нибудь может объяснить подобное поведение?
Полагаю что это из за того, что фокус на себя берёт созданный элемент, и любое нажатиие клавиш посылается именно этому элементу, хотя WM_KEYDOWN как я понял, принимает события только от самого GUI (т.е только если не сфокусирован ни один элемент).

Я попробовал убрать фокус с элемента, но это не помагает (точнее фокус не убирается, баг?)...

Код: Выделить весь код
$BUTTON = GUICtrlCreateButton("Button",10,10,50,20)
GUICtrlSetState(-1, $GUI_NOFOCUS)
Diamond,
Очень странно, но если создать элемент после GuiSetState(), то всё работает:

Код: Выделить весь код
#include <GUIConstants.au3>
Global Const $WM_KEYDOWN = 0x0101

$HWnd = GUICreate("KEYDOWN_TEST",400,300)
GUIRegisterMsg($WM_KEYDOWN, "Get_KeyDown")

GUISetState()

$BUTTON = GUICtrlCreateButton("Button",10,10,50,20)

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case -3
            Exit
    EndSwitch
WEnd

Func Get_KeyDown($HWnd,$Command,$wParam,$lParam)
    MsgBox(262144,"Код нажатой кнопки:", BitAND($wParam,0xFF))
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


Отправлено: 18:38, 12-09-2007 | #441



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

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


Пользователь


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

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


Creat0R,
Действительно, должны обрабатываться только те нажатия, которые посылаються в окно гуи.
А насчёт бага, если это даже и не баг, то использование $WM_KEYDOWN полностью теряет смысл... кому оно нужно если GUI будет пустым...
Кстати, я сначала тоже предположил что дело в фокусе или табуляции.
Цитата:
Очень странно, но если создать элемент после GuiSetState(), то всё работает
Действительно странно... а если по каким либо причинам придётся повторно использовать GUISetState() - то событие снова перестанет обрабатываться.

Последний раз редактировалось Diamond, 12-09-2007 в 19:15.


Отправлено: 19:00, 12-09-2007 | #442


Аватара для Creat0R

Must AutoIt


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

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


Diamond,
Цитата:
использование $WM_KEYDOWN полностью теряет смысл... кому оно нужно если GUI будет пустым...
См. пример в моём предыдущем посте, я запостил его почти сразу после первого, но они склеились

P.S
Может пойти попробовать репортануть о баге(?) с фокусом?

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

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

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


Отправлено: 19:16, 12-09-2007 | #443


Пользователь


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

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


Creat0R,
А может быть дело совсем не в фокусе...?

Добавлено:
...имхо, дело не в фокусе, иначе это не работало бы ни до ни после GUISetState().
Репортануть то можно бы... правда у меня знания английского почти нулевые.

Последний раз редактировалось Diamond, 12-09-2007 в 19:41.


Отправлено: 19:24, 12-09-2007 | #444


Аватара для Creat0R

Must AutoIt


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

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


Diamond,
Цитата:
Репортануть то можно бы
Пока оставил пост в разделе по GUI, может у разработчиков (или опытных AutoIt-ГУРУ ) найдётся более правильное обьяснение, или даже решение.

Diamond,
Видимо не суждено это побороть:

Цитата AutoIt3 Help File:
Some controls consume internally specific Windows Message ID, so registrating them will have no effect, e.g; WM_CHAR, WM_KEYDOWN, WM_KEYUP are consumed by an edit control.

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

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

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

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

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


Пользователь


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

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


Creat0R,
Цитата:
Пока оставил пост в разделе по GUI
Спасибо!

Вот ещё пример с колёсиком мыши и слайдером - наверное здесь тоже происходит "поглощение":

При изменении позиции слайдера колесом мыши, GUIGetMsg() не срабатывает, а загружать основной цикл постоянными запросами тоже не хочется. Вот как раз здесь-то и пригодилась бы $WM_MOUSEWHEEL - для того чтобы получать значение слайдера при повороте колеса мыши (если он в фокусе). Но увы... именно когда он в фокусе, событие $WM_MOUSEWHEEL перестаёт обрабатываться.
Код: Выделить весь код
#include <GUIConstants.au3>
$HWnd = GUICreate("MOUSEWHEEL_TEST",400,300)
$BUTTON  =  GUICtrlCreateButton("Get Value",10,10,70,20)
$SLIDER =  GUICtrlCreateSlider(10,70,300,20)
$INPUT  =    GUICtrlCreateInput("0",10,100,30,18,BitOR($ES_READONLY,$ES_CENTER))
Global Const $WM_MOUSEWHEEL = 0x020A
GUIRegisterMsg($WM_MOUSEWHEEL,"Get_MouseWheel")
GUISetState()

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case -3
            Exit
        Case $SLIDER
            GUICtrlSetData($INPUT,GUICtrlRead($SLIDER))
        Case $BUTTON
            MsgBox(0,"Текущее значение слайдера:",GUICtrlRead($SLIDER))
    EndSwitch
WEnd

Func Get_MouseWheel($HWnd,$Command,$wParam,$lParam)
    Switch $wParam
        Case 0x00780000 ; UP
            Beep(100,40)
        Case 0xFF880000 ; DOWN
            Beep(80,40)
    EndSwitch
EndFunc

Отправлено: 09:57, 13-09-2007 | #446


Аватара для Creat0R

Must AutoIt


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

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


Diamond,
Цитата:
загружать основной цикл постоянными запросами тоже не хочется. Вот как раз здесь-то и пригодилась бы $WM_MOUSEWHEEL
Очень кстати по поводу Slider, как раз сегодня на оф. форуме кто-то спросил про эту же функциональность, я сначала тоже предложил решение с использованием главного цикла, но позже поискал в MSDN и нашёл более практичное решение:

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

Global Const $WM_HSCROLL = 0x0114
Global Const $WM_VSCROLL = 0x0115

$Gui = GuiCreate("Slider Update Demo", 250, 200)

GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")
GUIRegisterMsg($WM_VSCROLL, "WM_HVSCROLL")

$Vertical_Label = GUICtrlCreateLabel("Vertical Slider Read: 0", 20, 20, 200)
$Horizontal_Label = GUICtrlCreateLabel("Horizontal Slider Read: 0", 80, 120, 200)

$Vertical_Slider = GUICtrlCreateSlider(20, 50, 30, 120, BitOr($GUI_SS_DEFAULT_SLIDER, $TBS_VERT))
$Horizontal_Slider = GUICtrlCreateSlider(60, 150, 160, 30)

GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case -3
            Exit
    EndSwitch
WEnd

Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    Switch $MsgID
        Case 277
            GUICtrlSetData($Vertical_Label, "Vertical Slider Read: " & GUICtrlRead($Vertical_Slider))
        Case 276
            GUICtrlSetData($Horizontal_Label, "Horizontal Slider Read: " & GUICtrlRead($Horizontal_Slider))
    EndSwitch
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

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

Отправлено: 10:18, 13-09-2007 | #447


Пользователь


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

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


Creat0R,
Да ты просто фокусник! Вот так вот запросто взял и нашёл отличное решение. Спасибо!
Я поправил твою функцию, это позволит обрабатывать сколько угодно слайдеров.
Код: Выделить весь код
Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    Switch $LParam
        Case GUICtrlGetHandle($Vertical_Slider)
            GUICtrlSetData($Vertical_Label, "Vertical Slider Read: " & GUICtrlRead($Vertical_Slider))
        Case GUICtrlGetHandle($Horizontal_Slider)
            GUICtrlSetData($Horizontal_Label, "Horizontal Slider Read: " & GUICtrlRead($Horizontal_Slider))
    EndSwitch
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:01, 13-09-2007 | #448


Аватара для Creat0R

Must AutoIt


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

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


Diamond,
Цитата:
Я поправил твою функцию, это позволит обрабатывать сколько угодно слайдеров
Класс! Спасибо.

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

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

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


Отправлено: 19:46, 13-09-2007 | #449


Аватара для Creat0R

Must AutoIt


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

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


Написал тут утилитку для сохранения и восстановления позиции иконок рабочего стола...



Прлучилось вроде неплохо

Скачать архив можно тут.

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

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

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:17, 13-09-2007 | #450



Компьютерный форум 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




 
Переход