Прочитав тему про
переход на AutoIt, захотелось выложить пример совместного использования.
Как-то прочитав в контакте...
http://www.youtube.com/watch?v=ijoPWdnJbvQ&feature=youtu.be... прочитав вконтакте вопрос о выводе простого диалогового окна с кнопками Да/Нет и дальнейшей обработкой результата, тоже подумал, что хорошо бы иметь такую возможность в кликере.
Действительно, то что я использовал до этого функцию INPUTBOX было очень неудобно. Помимо того, что окно не выводилось поверх других приложений по умолчанию, так и вводить Да-нет или 1-0 было крайне неудобно, нужно прицелиться мышкой, выделить значение по умолчанию, ввести своё... Нет, для ввода данных это нормально. Для привычного диалога в системе нет.
Так вот не дожидаясь расширения функционала, быстренько состряпал в AutoIt заготовку буквально из 5 строк (благо там работа со всякими окнами поставлена широко). Скомпилировал в экзешник. И решил вызывать его с передачей необходимых параметров. Всё получилось, параметры я передал, осталось получить реакцию. Полез в справку кликера, т.к. помнил что читал про возврат параметров в $_return1.
Тут я жестоко обломался. Возврат параметров подразумевался только при вызове плагинов сделанных в dll. Так как я в написании и создании dll не в зуб ногой, вспомнив в очередной раз про текстовые файлы, решил передавать параметры обратно через ini файл (и туда заодно, для однородности).
Перекомпилив заготовку AutoIt на новый лад, всё прекрасно срослось.
Оформлено в виде 2 подпрограмм.
SUB(Window) - настраиваемое окно
SUB(Window_yes-no) - упрощённый вариант, запрос на перезапись файла.
Все передаваемые значения и возвращаемые результаты в комментариях.
#name "Window & Window_yes-no"
// Author: Vint
// Version: 1.0 (10.09.2013)
//==============================================================================
SUB(Window) //========== Окно универсальное ===================================
// $window_flag = 0 // Режим окна (сколько и какие кнопки)
// $window_title = "Сообщение" // Заголовок окна
// $window_text = "Перезаписать файл?" // текст в окне
// $window_timeout = 5 // время оказа окна, "0"- без лимита
// GOSUB(Window) // вызываем настраиваемое окно
DEFINE($window_title, "Сообщение")
DEFINE($window_text, "Текст")
INIWRITE("Window.ini","flag",$window_flag, "Window")
WAITMS(50)
INIWRITE("Window.ini","title",$window_title, "Window")
WAITMS(50)
INIWRITE("Window.ini","text",$window_text, "Window")
WAITMS(50)
INIWRITE("Window.ini","timeout",$window_timeout, "Window")
WAITMS(50)
INIWRITE("Window.ini","return","0", "Window")
WAITMS(100)
EXECUTE("Window_ini.exe","Window")
WAIT(1)
WHILE(INT(INIREAD("Window.ini", "return", "Window")) = 0) // ожидание
WAITMS(100)
END_CYC
$return = INT(INIREAD("Window.ini", "return", "Window"))
IF($return = -1)
LOGWRITE ("Кнопка не нажата, время вышло")
ELSE
LOGWRITE ("Нажата кнопка с кодом: ",$return)
END_IF
// Возвращаемые значения:
// Время вышло $return = -1
// OK $return = 1
// Отмена (CANCEL) $return = 2
// Прервать (ABORT) $return = 3
// Повтор (RETRY) $return = 4
// Пропустить (IGNORE) $return = 5
// Да (YES) $return = 6
// Нет (NO) $return = 7
// Повторить (TRY AGAIN) $return = 10
// Продолжить (CONTINUE) $return = 11
//Параметр flag может быть комбинацией следующих значений:
//десятичное значение Отображаемые кнопки 0x
// 0 Кнопка OK 0x0
// 1 Кнопки OK и Отмена 0x1
// 2 Кнопки Прервать, Повтор и Пропустить 0x2
// 3 Кнопки Да, Нет и Отмена 0x3
// 4 Кнопки Да и Нет 0x4
// 5 Кнопки Повтор и Отмена 0x5
// 6 Кнопки Отмена, Повторить, Продолжить 0x6
//десятичное значение Отображаемая иконка 0x
// 0 (Нет) 0x0
// 16 Иконка "стоп" 0x10
// 32 Иконка "знак вопроса" 0x20
// 48 Иконка "предупреждение" 0x30
// 64 Иконка "информация", с 'i' в кружке 0x40
//десятичное значение Выделенная кнопка по умолчанию 0x
// 0 Первая кнопка 0x0
// 256 Вторая кнопка 0x100
// 512 Третья кнопка 0x200
//десятичное значение Модальность 0x
// 0 Приложение (Application) 0x0
// 4096 Системная, поверх всех окон 0x1000
// 8192 Блокирует родительское окно 0x2000
// десятичное значение Другое 0x
// 262144 имеет атрибут "поверх всех окон" 0x40000
// 524288 Заголовок и текст выравниваются по правому краю 0x80000
END_SUB
//==============================================================================
SUB(Window_yes-no) //========== Окно Да/нет ===================================
// $window_title = "Сообщение" // Заголовок окна
// $window_text = "Перезаписать файл?" // текст в окне
// $window_timeout = 5 // время показа окна, "0"- без лимита
// GOSUB(Window_yes-no) // вызываем окно Да/Нет
DEFINE($window_title, "Сообщение")
DEFINE($window_text, "Перезаписать файл?")
DEFINE($window_timeout, 5)
INIWRITE("Window.ini","flag","266532", "Windowyesno")
WAITMS(50)
INIWRITE("Window.ini","title",$window_title, "Windowyesno")
WAITMS(50)
INIWRITE("Window.ini","text",$window_text, "Windowyesno")
WAITMS(50)
INIWRITE("Window.ini","timeout",$window_timeout, "Windowyesno")
WAITMS(50)
INIWRITE("Window.ini","return","0", "Windowyesno")
WAITMS(100)
EXECUTE("Window_ini.exe","Windowyesno")
WAIT(1)
WHILE(INT(INIREAD("Window.ini", "return", "Windowyesno")) = 0) // ожидание
WAITMS(100)
END_CYC
$return = INT(INIREAD("Window.ini", "return", "Windowyesno"))
IF($return = 6)
LOGWRITE ("Нажата кнопка - ДА -")
ELSE
IF($return = 7)
LOGWRITE ("Нажата кнопка - Нет -")
ELSE
LOGWRITE ("Кнопка не нажата, время вышло")
END_IF
END_IF
// Возвращаемые значения:
// Время вышло $return = -1
// Да (YES) $return = 6
// Нет (NO) $return = 7
END_SUB
//==============================================================================
Обновлённые и расширенные версии здесь:
http://crapware.aidf.org/forum/index.php?topic=1147.msg5166#msg5166