Что нового

Мониторинг рабочего стола

Felix-irk

Новичок
Сообщения
6
Репутация
0
Версия AutoIt: 3.5.4

Описание:
Приветсвую Вас, светлые головы программирования! Сразу скажу, что с программой AutoIt знаком ровно один день, выяснил что с помощью неё можно решить мою задачу.
А задача состоит в мониторинге изменения на рабочем столе (мониторинг индикации иконок в определенной программе) с звуковом оповещением. Иными словами если в программе (на участке экрана) меняется цвет некоторых пикселей, то воспроизводится звук.

Нашел некоторые наработки
Код:
<job> 
 <object id="[abbr=AutoIt v3 is a freeware BASIC-like scripting language designed for automating  the Windows GUI and general scripting]AIt[/abbr]"  progid="AutoItX3.Control"/> 
 <object id="sapi" progid="SAPI.SpVoice"/> 
 <script language="JScript"> 
 
 var x0=0,y0=0,x1=100,y1=100;     // фрагмент экрана от 0:0 до 100:100 
 
 var crc0=[abbr=AutoIt v3 is a freeware BASIC-like scripting language designed for automating  the Windows GUI and general scripting]AIt[/abbr].pixelChecksum(x0,y0,x1,y1); 
 
 while(true) 
 { 
  WSH.sleep(500);         // проверка каждые 0.5 sec 
  var crc=[abbr=AutoIt v3 is a freeware BASIC-like scripting language designed for automating  the Windows GUI and general scripting]AIt[/abbr].pixelChecksum(x0,y0,x1,y1); 
  if(crc!=crc0) 
  { 
   crc0=crc; 
   sapi.speak("Alarm! Picture changed.") // орет человеческим голосом ) 
  } 
 } 
  
 </script> 
</job>


может чем то смогут помочь или направить.

Буду очень признателен за любую помощь!

Примечания:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Felix-irk

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
$begin_screen = PixelChecksum(0, 0, 100, 100, 1)
While 1
	$now_screen = PixelChecksum(0, 0, 100, 100, 1)
	if $begin_screen <> $now_screen Then
		SoundPlay(@ScriptDir & "\tadam.wav", 0)
	EndIf
	Sleep(1000)
WEnd
 
Автор
F

Felix-irk

Новичок
Сообщения
6
Репутация
0
Спасибо, tadam.wav класть в каталог с файлом ua3?
Разобрался ) Как оказывается все просто!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Felix-irk
Код:
SoundPlay(@WindowsDir &"\Media\tada.wav", 1)
 
Автор
F

Felix-irk

Новичок
Сообщения
6
Репутация
0
Первоначальный PixelChecksum берется при старте программы? Возможно ли сделать так чтоб звук был при каждом изменении PixelChecksum и не зацикливался?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Felix-irk сказал(а):
Первоначальный PixelChecksum берется при старте программы? Возможно ли сделать так чтоб звук был при каждом изменении PixelChecksum и не зацикливался?
запилено:
Код:
$begin_screen = PixelChecksum(0, 0, 100, 100, 1)
While 1
	$now_screen = PixelChecksum(0, 0, 100, 100, 1)
	if $begin_screen <> $now_screen Then
		$begin_screen = PixelChecksum(0, 0, 100, 100, 1)
		SoundPlay(@WindowsDir &"\Media\tada.wav", 1)		
	EndIf
	Sleep(1000)
WEnd
 
Автор
F

Felix-irk

Новичок
Сообщения
6
Репутация
0
Данный скрипт мониторит эту часть окна? Рисунок в приложении
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    17 КБ · Просмотры: 11

hedji

Продвинутый
Сообщения
409
Репутация
94
Felix-irk сказал(а):
Данный скрипт мониторит эту часть окна? Рисунок в приложении

нет, координаты отсчитываются с нуля от верхнего левого края экрана.
скрипт мониторит верхний левый угол квадрат 100х100 пикселей.
для приведенного примера нужны:
Код:
$begin_screen = PixelChecksum(0, @DesktopHeight-100, 100, @DesktopHeight)
$now_screen = PixelChecksum(0, @DesktopHeight-100, 100, @DesktopHeight)
 
Автор
F

Felix-irk

Новичок
Сообщения
6
Репутация
0
Хеджи, ты избивал меня от огромной проблемы! Да прибудет с тобой сила!!! Задачу можно отмечать решенной!



Добавлено:
Сообщение автоматически объединено:

Еще один вопросик. Как проделать тот же фокус, но при изменении цвета одного или нескольких пикселей на определенный цвет?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Felix-irk сказал(а):
Еще один вопросик. Как проделать тот же фокус, но при изменении цвета одного или нескольких пикселей на определенный цвет?
Использовать:
Код:
PixelGetColor()
;вместо
PixelChecksum()

Нужный цвет определить заранее по скриншоту. Остальная логика работы скрипта не меняется.
 
Автор
F

Felix-irk

Новичок
Сообщения
6
Репутация
0
Мне нужно написать условие
Код:
if $now_screen = (код цвета)

Так вот, как выразить код цвета в данном случае?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Берете AutoIt Window Info, наводите на нужную часть экрана и смотрите координаты и цвет.
Только нужно обратить внимание, что AutoIt Window Info возвращает цвет в 16-й системе, а PixelGetColor() в десятичной, не забудьте пересчитать.
 

Вложения

  • .PNG
    .PNG
    15.2 КБ · Просмотры: 14
Верх