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

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


Спросил я на оф. форуме про такую фичу как пристыковка окна GUI к краям экрана, дали мне почти полноценное решение...

Осталось решить две значительные проблемы перед тем как можно будет использовать данную фичу:

1) В момент смещения окна к краям (в процессе пристыковки) курсор мышки как бы остаётся позади и смещается, что в конце (если достаточно поиграться ) приводит к тому, что курсор мышки "гуляет" по приделам GUI-окна .

2) Панель задачь не всегда находится внизу, и не всегда имеет один размер, нужно как то получать размеры рабочей области, т.е только те границы между панелью задач и краями экрана - и соответственно пристыковывать окно.

Вот что на данный момент имеется:

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

Const $Range = 20
Const $WM_MOVING = 0x0216
Const $WM_ENTERSIZEMOVE = 0x0231
Global $X_START, $Y_START

$Gui = GUICreate("Attach Window GUI to screen edge", 350, 200)
GUISetState()

GUICtrlCreateLabel("Притащите окно к краям экрана ;)", 0, 80, 350, 30, $ES_CENTER)
GUICtrlSetFont(-1, 14, 800)

GUIRegisterMsg($WM_ENTERSIZEMOVE, "WM_ENTERSIZEMOVE")
GUIRegisterMsg($WM_MOVING, "WM_MOVING")

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Func WM_ENTERSIZEMOVE()
    Local $aMPos = MouseGetPos()
    $X_START = $aMPos[0]
    $Y_START = $aMPos[1]
EndFunc

Func WM_MOVING($hWnd, $Msg, $wParam, $lParam)
    Local $TaskBarPos = WinGetPos("[CLASS:Shell_TrayWnd]")
    Local $hWndPos = WinGetPos($hWnd)
    Local $aMPos = MouseGetPos()

        Local $Rect = DllStructCreate("long left; long top; long right; long bottom", $lParam)
    $Left = DllStructGetData($Rect, "left")
    $Top = DllStructGetData($Rect, "top")
    $Right = DllStructGetData($Rect, "right")
    $Bottom = DllStructGetData($Rect, "bottom")

        If $Left <= $Range And $aMPos[0] < $X_START Then
        DllStructSetData($Rect, "left", 0)
        DllStructSetData($Rect, "right", $Right-$Left)
    EndIf

        If $Top <= $Range And $aMPos[1] < $Y_START Then
        DllStructSetData($Rect, "top", 0)
        DllStructSetData($Rect, "bottom", $Bottom-$Top)
    EndIf

        If $Right >= (@DesktopWidth - $Range) And $aMPos[0] > $X_START Then
        DllStructSetData($Rect, "right", @DesktopWidth)
        DllStructSetData($Rect, "left", (@DesktopWidth-$Right)+$Left)
    EndIf

        If $Bottom >= ($TaskBarPos[1] - $Range) And $aMPos[1] > $Y_START Then
        DllStructSetData($Rect, "bottom", $TaskBarPos[1])
        DllStructSetData($Rect, "top", ($TaskBarPos[1]-$Bottom)+$Top)
    EndIf
    WM_ENTERSIZEMOVE()
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

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

Отправлено: 21:05, 07-09-2007 | #431



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

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


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

Ветеран


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

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


Как сделать, что бы элемент "Нет", менял позицию при наведении на него курсора мыши?

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("MouseCoordMode", 2)
Dim $x, $y
GUICreate("Test", 300, 200)
$yes = GUICtrlCreateButton("Да", 20, 50, 50)
$no = GUICtrlCreateButton("Нет", 200, 50, 50)
$label = GUICtrlCreateLabel("Довольны ли вы своей зарплатой?", 50, 10, 200, 20)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
        ExitLoop
    Case $msg = $yes
        MsgBox(64, "Да", "Мы так и думали!")
        ExitLoop
    Case $msg = $no
        GUICtrlSetPos($no, Random(250), Random(170))
    EndSelect
WEnd

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


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
что бы элемент "Нет", менял позицию при наведении на него курсора мыши?
Можно так:

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("MouseCoordMode", 2)
Dim $x, $y, $ChangedPos = False
$Gui = GUICreate("Test", 300, 200)
$yes = GUICtrlCreateButton("Да", 20, 50, 50)
$no = GUICtrlCreateButton("Нет", 200, 50, 50)
$label = GUICtrlCreateLabel("Довольны ли вы своей зарплатой?", 50, 10, 200, 20)

GUISetState()

While 1
    $msg = GUIGetMsg()
    $CurInfo = GUIGetCursorInfo($Gui)
    If $CurInfo[4] = $no And Not $ChangedPos Then
        GUICtrlSetPos($no, 20, 50)
        GUICtrlSetPos($yes, 200, 50)
        $ChangedPos = True
    ElseIf $CurInfo[4] = $no And $ChangedPos Then
        GUICtrlSetPos($no, 200, 50)
        GUICtrlSetPos($yes, 20, 50)
        $ChangedPos = False
    EndIf

        Select
    Case $msg = $GUI_EVENT_CLOSE
        ExitLoop
    Case $msg = $yes
        MsgBox(64, "Да", "Мы так и думали!")
        ExitLoop
    Case $msg = $no
        GUICtrlSetPos($no, Random(250), Random(170))
    EndSelect
WEnd

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

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

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

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

Отправлено: 16:51, 10-09-2007 | #433


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

Ветеран


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

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


Creat0R
Спасибо, сделал так:
Код: Выделить весь код
#include <GUIConstants.au3>
Dim $x, $y, $ChangedPos = False
$Gui = GUICreate("Test", 300, 200)
$yes = GUICtrlCreateButton("Да", 20, 50, 50)
$no = GUICtrlCreateButton("Нет", 200, 50, 50)
$label = GUICtrlCreateLabel("Довольны ли вы своей зарплатой?", 50, 10, 200, 20)

GUISetState()

While 1
    $msg = GUIGetMsg()
    $CurInfo = GUIGetCursorInfo($Gui)
    If $CurInfo[4] = $no Then GUICtrlSetPos($no, Random(240), Random(180))
        Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $yes
            MsgBox(64, "Да", "Мы так и думали!")
            ExitLoop
        EndSelect
    WEnd

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


Отправлено: 09:54, 11-09-2007 | #434


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Я так понял нужно чтобы при навидении на кнопку “Нет” кнопка постоянно "пряталась"?
Тогда желательно найти уникальные координаты, т.е убедиться что текущие найденные по Random не являются координатами кнопки "Да" (что не исключено ) ...

Код: Выделить весь код
#include <GUIConstants.au3>
Dim $x, $y, $ChangedPos = False
$Gui = GUICreate("Test", 300, 200)
$yes = GUICtrlCreateButton("Да", 20, 50, 50, 25)
$no = GUICtrlCreateButton("Нет", 200, 50, 50, 25)
$label = GUICtrlCreateLabel("Довольны ли вы своей зарплатой?", 50, 10, 200, 20)

GUISetState()

While 1
    $msg = GUIGetMsg()
    $CurInfo = GUIGetCursorInfo($Gui)
    If $CurInfo[4] = $no Then
        $CurrentCoords = ControlGetPos($Gui, "", $no)
        $Random_Left_Coords = Random(20, 250, 1)
        $Random_Top_Coords = Random(30, 160, 1)

        While $Random_Left_Coords > 20 And $Random_Left_Coords < 70
            $Random_Left_Coords = Random(20, 250, 1)
        WEnd

        While $Random_Top_Coords > 30 And $Random_Top_Coords < 75
            $Random_Top_Coords = Random(30, 160, 1)
        WEnd

        GUICtrlSetPos($no, $Random_Left_Coords, $Random_Top_Coords)
    EndIf

        Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $yes
            MsgBox(64, "Да", "Мы так и думали!")
            ExitLoop
    EndSelect
WEnd
P.S
Я подобными приколами тоже по началу баловался, правда тема была другая - "Вы желаете форматировать диск C:\ ?"

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

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

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:32, 11-09-2007 | #435


Аватара для Creat0R

Must AutoIt


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

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


Вышла новая версия AutoIt v3.2.8.1 (10th September, 2007)

Список изменении по сравнению с 3.2.6.0:

Цитата http://www.autoitscript.com/autoit3/docs/history.htm:
8th September, 2007 - v3.2.8.1

Fixed: Possible crash with StringRegExp().


8th September, 2007 - v3.2.8.0

Changed: General speed improvements (currently up to 24% in some cases compared to 3.2.6.0).
Changed: PCRE regular expression engine updated to 7.3.
Changed: Recursion-based code limits relaxed.

Added: wchar type added to DllStructCreate().
Added: WinMove() speed parameter.

Fixed: Crash on AutoIt exit if TrayCreateItem() is not deleted.
Fixed: AutoIt crash on bad parameter when calling TrayCreateMenu()
Fixed: Character positions used in StringRegExp() not correct for characters > 127 (accents, non-Western)
Fixed: ProcessExist() under Windows 9x.
Fixed: GUISetState(@SW_DISABLE) not disabling keyboard input.
Fixed: Sometimes AutoIt crashes on DllStructGetData() with char[] types.
Fixed: Au3Info restoring last settings at startup.
Fixed: Better handling of notifications when using colored buttons.
Fixed: ControlGetText() crash on Scite windows.
Fixed: $LVSCW_AUTOSIZE column truncates display string.
Fixed: Incorrect listview creation with GUICtrlCreateListView().
Fixed: Memory leak when AutoIt needed to get long file name.
Fixed: ListviewItem not created after other child Window creation/deletion.
Fixed: ControlGetFocus() returning bad ClassNN values.
Fixed: Detection of invalid CONTINUELOOP statement.
P.S
3 бага из этого списка я зарепортил:

1. GUISetState(@SW_DISABLE) not disabling keyboard input.
2. ListviewItem not created after other child Window creation/deletion.
3. Detection of invalid CONTINUELOOP statement.

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

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

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:29, 12-09-2007 | #436


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


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

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


а как скопировать файл с помошью автоит... желательно зашить его в файл.ехе подскажите плис)

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


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


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

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


mikola1983,
Цитата:
а как скопировать файл с помошью автоит... желательно зашить его в файл.ехе
Если ты имеешь ввиду как вложить файл в скомпилированный скрипт - с помощью функции FileInstall()
Например:
Код: Выделить весь код
FileInstall("C:\image.jpg", @TempDir & "\image.jpg", 1)
Первый параметр - путь к файлу (путь не должен содержать переменных или макросов)
Второй параметр - путь для извлечения
И наконец третий параметр определяет, будет ли перезаписываться файл при извлечении если файл с таким же именем в этом пути уже существует.

Добавлено:
Совсем не факт что файл будет извлечён сразу при запуске скомпилированного скрипта.
Эту фунцию можно закрыть условием или событием, тогда файл будет извлечён только если событие произошло (В моём примере при нажатии кнопки "Да")
Код: Выделить весь код
If MsgBox(4+32,"Извлечение файла","Хотите извлечь файл?") = 6 Then 
	$install = FileInstall("C:\image.jpg", @ScriptDir & "\image.jpg")
	If $install Then 
		MsgBox(0,"Извлечение файла","Файл " & @ScriptDir & "\image.jpg успешно извлечён.")
	Else
		MsgBox(16,"Извлечение файла","Ошибка извлечения!")
	EndIf
EndIf

Последний раз редактировалось Diamond, 12-09-2007 в 10:52. Причина: Добавление

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

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


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


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

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


Функция Get_KeyDown() прекрасно реагирует на нажатие кнопок на клавиатуре, но стоит только прописать кнопку или другой элемент, и событие перестаёт обрабатываться.
Кто нибудь может объяснить подобное поведение?
Код: Выделить весь код
#include <GUIConstants.au3>
$HWnd = GUICreate("KEYDOWN_TEST",400,300)
;~ $BUTTON = GUICtrlCreateButton("Button",10,10,50,20)
Global Const $WM_KEYDOWN = 0x0100
GUIRegisterMsg($WM_KEYDOWN,"Get_KeyDown")
GUISetState()

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

Func Get_KeyDown($HWnd,$Command,$wParam,$lParam)
    MsgBox(262144,"Код нажатой кнопки:",BitAND($wParam,0xFF))
EndFunc

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


Новый участник


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

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


Ищу репетитора по AutoIt на пару - тройку уроков в Москве.

предложения в ПМ

Отправлено: 17:48, 12-09-2007 | #440



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




 
Переход