[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 14
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Diamond,


Цитата:



как раз именно из-за постоянных мельканий элементов



Но они у меня и до этого мелькали Изображение




Цитата:



с точки зрения пользователя было бы некорректно заменять текущий курсор на новый



Согласен, поищу на оф. форме, может есть метод получить текущий курсор (хотя я уверен что есть, нужно просто хорошенько поискать, ну или вежливо спросить Изображение ).




Цитата:



При нажатии на тоновую шкалу (точнее при отпускании мышки с $GrCover) происходило определение цвета тоновой шкалы, и это не зависило от Пипетки



Ну, не уверен, но у меня и сейчас всё нормально определяется (или я не понял про что речь?)...




Цитата:



Вместо этого добавился глюк: При клике по $GrCover запускается последнее действие



Хм.. видимо фокус остаётся на последнем элементе, и WM_COMMAND срабатывает намного быстрее чем фокус меняется на используемый элемент (на который была нажата мышка), поэтому чтобы это поправить, нужно всего лишь заменить строку получения сфокусирорванного элемента, на $LParam (твой метод Изображение) :





Код:

Код: Выделить всё

Local $FocusedHandel = $LParam;ControlGetHandle($hWndGUI, "", ControlGetFocus($hWndGUI))


Цитата:



Не @SW_HIDE а @SW_DISABLE



Именно @SW_HIDE (для WinSetState()), ведь эффект там происходил скрытия окна а не деактивирования... но это не столь важно.



P.S

Я если честно, считаю что переделав весь подход к подобному скрипту (методы решения и использование функции/вызовы), можно добиться идеальных результатов (где ничего не будет мелькать, и при этом обновляться в реальном времени)... но у меня пока (и полагаю что у тебя тоже), времени на это совсем нету Изображение
Аватара пользователя
SAOPP

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SAOPP »

Ребят, почитав ЧаВо понял, что реализовать скрипт, который будет выключать определённую галочку в настройках панели задач можно(?), но не силён я в AutoIt'е, можно сказать вообще. Ответьте на такой вопрос, можно ли автоматизировать следующее действие:





Аватара пользователя
Maza Faka

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Maza Faka »

SAOPP

Попробуй:



Код:

Код: Выделить всё

Opt("WinTitleMatchMode", 4)
$tray = "Classname=Shell_TrayWnd"
ControlFocus($tray, "", "ToolbarWindow322")
ControlClick($tray, "", "ToolbarWindow322", "right")
Send("{UP 8}")
Send("{RIGHT}")
Send("{DOWN 3}")
Send("{ENTER}")
Аватара пользователя
SAOPP

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SAOPP »

Diamond

Как это я раньше не подумал, ведь текущий курсор можно брать с реестра Изображение ...





Код:

Код: Выделить всё

Local $Old_EES = Opt("ExpandEnvStrings", 1)
Local $OldCursor = RegRead("HKEY_CURRENT_USER\Control Panel\Cursors", "Arrow")
_SetCursor(@WindowsDir & "\cursors\cross_m.cur", 32512)
_SetCursor($OldCursor, 32512)
If @error Then _SetCursor(@WindowsDir & "\cursors\3dwarro.cur", 32512)
Opt("ExpandEnvStrings", $Old_EES)
Аватара пользователя
SAOPP

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SAOPP »

Creat0R, что бы во время выполнения скрипта был другой курсор? Изображение
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

SAOPP,

Это для пипетки, вот
[архив - Часть 2] AutoIt скрипты
мы обсуждали эту тему Изображение
Аватара пользователя
TERMINAL

Re: [архив - Часть 2] AutoIt скрипты

Сообщение TERMINAL »

Народ! помогите на скрипте написать прогу которая ждёт 10 минут и если пользователь не нажимал ни одной клавиши (короче отсутствовал) тогда комп просто выключается.
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

TERMINAL,


Цитата:



написать прогу которая ждёт 10 минут и если пользователь не нажимал ни одной клавиши (короче отсутствовал) тогда комп просто выключается.



Лови (функция _IdleWaitCommit() написана by amel27, я её лишь немного подправил для данного примера):





Код:

Код: Выделить всё

HotKeySet("^q", "Quit")
$Minutes = 10 ;Тут задаётся интервал ожидания в минутах
While 1
    $Timer = TimerInit()
    _IdleWaitCommit(0)
WEnd
Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
        $iSave = DllStructGetData ($LastInputInfo, 2)
        Sleep(100)
        DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
        If TimerDiff($Timer) >= $Minutes * 60000 Then
            MsgBox(64, "Внимание", "10 минут спустя, а хозяина нету ;)", 10)
            ;Shutdown(1 + 4) ;Force Shutdown
            ExitLoop
        EndIf
    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
EndFunc
Func Quit()
    Exit
EndFunc

Я закоментировал на всякий случай строку с выключением компа (;Shutdown(1 + 4) ;Force Shutdown).
Аватара пользователя
TERMINAL

Re: [архив - Часть 2] AutoIt скрипты

Сообщение TERMINAL »

Creat0R, Это всё хорошо, но а как сделать если он есть, то прога просто использует EXIT.

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

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SAOPP »

Creat0R


Цитата:



проблема не в этой функции, а в _SysTrayIconPids() - Если запущено приложение дважды (т.е две одинаковые иконки теперь в трее), то в массив попадает неверный порядок идентификаторов



точно, так как _SysTrayIconPids() возвращает PID (в основном) по имени процесса, может эту UDF тоже подправить и обрабатывать ВСЕ иконки как безымянные, т.е. по индексу?

Код:

Код: Выделить всё

Func _SysTrayIconPids()
    Local $i
    Local $titles = _SysTrayIconTitles()
    Local $processes[UBound($titles)]
    Local $ret
    For $i=0 to Ubound($titles)-1
        $ret = DLLCall("user32.dll","int","GetWindowThreadProcessId", "int", _SysTrayIconHandle($i), "int_ptr", -1)
        If Not @error Then $processes[$i] = $ret[2]
    Next
    Return $processes
EndFunc
Ответить

Вернуться в «AutoIt»