1

Тема: AHK : Пропуски в считывании hotkeys.

Во время работы скрипта производится поиск большого числа картинок с помощью ImageSearch.  Весь поиск занимает в основном 150-600 мс.  В это время горячие клавиши скрипта не срабатывают. Поиск картинок производится в несколько этапов.  Там с два десятка Loop, ещё с десяток вложенных и около 60 картинок примерно 8x4. Сам поиск оптимизирован максимально - все регионы указываются  с максимально возможной точностью.

Как можно избавться от пропусков в срабатывании горячих клавиш? 

Спасибо за помощь!

2

Re: AHK : Пропуски в считывании hotkeys.

Вынести горячие клавиши в отдельный скрипт, запускать два скрипта.

3

Re: AHK : Пропуски в считывании hotkeys.

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

ToggleComposition()
{
    DllCall("Dwmapi\DwmIsCompositionEnabled", "UInt*", isEnabled)
    DllCall("Dwmapi\DwmEnableComposition", "UInt", !isEnabled)
}

4

Re: AHK : Пропуски в считывании hotkeys.

Спасибо, первое уже осуществил. Второе - попробую.

5

Re: AHK : Пропуски в считывании hotkeys.

Применил вот так.

ToggleComposition()
{
    DllCall("Dwmapi\DwmIsCompositionEnabled", "UInt*", isEnabled)
  
    поиск картинок

    DllCall("Dwmapi\DwmEnableComposition", "UInt", !isEnabled)
}

  Верно?

Время замерить почему-то не получается. Выдаётся "0".  Пробовал отмерять время как непосредственно за рамками этой конструкции, так и внутри. Почему так? Как его померять?

6 (изменено: creature.ws, 2012-12-13 14:12:31)

Re: AHK : Пропуски в считывании hotkeys.

Примените так:


DllCall("Dwmapi\DwmEnableComposition", "UInt", 0)
поиск картинок
конец скрипта

Если не затруднит вас — чем вы руководствовались, добавив в процедуру, выполняющую конкретное действие код к выполнению сего действия не относящийся?

7

Re: AHK : Пропуски в считывании hotkeys.

creature.ws пишет:

Примените так:


DllCall("Dwmapi\DwmEnableComposition", "UInt", 0)
поиск картинок
конец скрипта

    Скорее всего я в вашем совете чего-то не понимаю.
       У меня где-то 6К строк кода.  Из них  поиск картинок -  2-3К где-то в середине. Результаты поиска картинок, естественно в последствии должным образом обрабатываются.  Я не представляю себе как переделать скрипт, чтобы поиск картинок оказался в конце скрипта. 

Если не затруднит вас — чем вы руководствовались, добавив в процедуру, выполняющую конкретное действие код к выполнению сего действия не относящийся?

" Если я что-то для чего-то отключаю, то наверное после окончания этого чего-то стоит это отключённое  назад включить?"

В предложенном коде две похожих строки. Я предполагаю, что первая что-то отключает, а вторая включает. Я располагаю своё "для чего-то" между ними. Возможно вывод абсурден, но другой логики, не понимая сути кода, я  не усмотрел.

8 (изменено: creature.ws, 2012-12-13 14:50:09)

Re: AHK : Пропуски в считывании hotkeys.

Я не представляю себе как переделать скрипт, чтобы поиск картинок оказался в конце скрипта.


Начало скрипта
DllCall("Dwmapi\DwmEnableComposition", "UInt", 0)
100500 строк скрипта
конец скрипта

но другой логики, […] я  не усмотрел

Понимаю, учту в дальнейшем

Учитывая сообщения выше, переспрошу:
Вы прочитали эту часть сообщения #3?

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

Вы ранее производили поиск картинок не отключая композицию рабочего стола?
Отключали? Тогда мой совет неуместен. И вам нет нужды хвататься за пример кода как за соломинку.
Не отключали? Тогда время поиска картинок уменьшится на пару порядков и вопрос с не буферизованными горячими клавишами будет, вероятно, решен.

9 (изменено: Pokerist, 2012-12-13 15:28:04)

Re: AHK : Пропуски в считывании hotkeys.

creature.ws пишет:

Вы прочитали эту часть сообщения #3?

    Да, потому так и воспринял код, как пример для включения/выключения. 
"Поиск картинок и пикселей рекомендуется производить при отключенной композиции рабочего стола."?
Значит перед поиском выключаем, а после поиска включаем. Потому и вставил код так.


Вы ранее производили поиск картинок не отключая композицию рабочего стола?
Отключали?

   Сам ничего не отключал. Даже не особо понял, что это такое. Единственно, что "Aero", как и все примочки, отключаю сразу после установки Windows.

10

Re: AHK : Пропуски в считывании hotkeys.

Даже не особо понял, что это такое.

Не поняли — не тяните в код что попало.
Последние 8 сообщений не относятся к решению вопроса темы.

11 (изменено: Pokerist, 2012-12-15 12:51:58)

Re: AHK : Пропуски в считывании hotkeys.

Пару дней использую хоткеи отдельным скриптом. Всё равно иногда случаются провалы в работе. Скрипт, читающий картинки, очевидно слишком тормозит комп. Почти каждый раз в момент чтения к курсору добавляются часики, что свидетельствует о перегрузке.

Как можно протестировать, что именно вызывает это явление, и как можно исправить положение?

12 (изменено: Lexanni, 2012-12-16 12:25:20)

Re: AHK : Пропуски в считывании hotkeys.

Простите, если я какую глупость говорю… Но может имеет смысл повысить или понизить приоритет одного из скриптов?

http://www.script-coding.com/AutoHotkey/Process.html

13

Re: AHK : Пропуски в считывании hotkeys.

Уже пробовал поиграть с приоритетмаи через диспетчер задач. Не помогло.

14

Re: AHK : Пропуски в считывании hotkeys.

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

15

Re: AHK : Пропуски в считывании hotkeys.

Нашёл среди операторов по поиску картинок подрограмму с обращением к буферу обмена и т.д. Ставил её там в технических целях. Возможно задержки были из-за этого. Убрал, скорости особо не прибавило, но возможно не будут проскальзывать хоткеи.