LINUX.ORG.RU

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


0

1

Добрый день! Нужна помощь в решении несложной задачи.

Суть задачи: 1- следить за одним пикселем экрана ( по введённым координатам либо под курсором мыши), 2- при изменении цвета подать звуковой сигнал ( как самый простой вариант- можно через выполнение команды с помощью любого плеера управляемого через консоль, например MPlayer ).

Собственно и два вопроса: 1- Мне неизвестно каким средством (в какой среде) и с помощью какой функции можно узнать цвет любой точки экрана в Linux (Имеется небольшой опыт программирования без использования системных функций -только решение алгоритмов, - в консольном C Linux-а, а также Pascal и Delphi; web-программированием не занимался.) В Delphi для этого имеется специальная функция, а опрос делать можно например по таймеру через определённый интервал. Должно быть что-то похожее в C++\QT или может быть в Lazarus. 2- Какой функцией запускается какая-либо внешняя программа ( ну это думаю несложно и погуглить -справлюсь, главное решить первый вопрос )

Язык и рабочая среда особо роли не играют если программа не раздуется до более полсотни строк. Скорее всего есть какие-то стандартые приёмы. Предполагаю проще будет в QT или Lazarus. Предпочтительнее решение на Pascal ( но не знаю возможно ли это ). СИ, думаю, может оказаться сложнее, но если кто поделится готовым куском кода, тоже вполне подойдёт.

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

Пользуюсь Ubuntu 10.04 Gnome, дополнительно ставил QT и KDE, вроде есть TK (так не помню, пишу с работы).


не могли бы Вы описать зачем Вам такое нужно (если не секрет), а то есть мнение, что всё проще решается

shty ★★★★★
()

while true

сделай скриншот

сравни пиксель exec(mplayer)

wend

anonymous
()

Давненько никто таких эпичных костылей не лепил. Огласи первоначальную задачу.

baverman ★★★
()
Ответ на: комментарий от shty

Первоначальная задача: проснуться в любое время суток когда в аську выйдет нужный мне человек ( все остальные люди меня не интересуют, а поотдельности звуковые сигналы в аське не настраиваются) : значок поменяется с красного на зелёный. мне кажется поставленная задача должна решаться легко, по крайней мере в Delphi я это быстро сделаю. Можно в крайнем и так, через Wine, если заработает.

BP
() автор топика
Ответ на: комментарий от BP

О_о Вот оно как... Как додумался до такого решения?

mopsene ★★★
()
Ответ на: комментарий от BP

Предлагаю менее костыльное решение: взять биндинги к протоколу ICQ для $favourite_programming_language, отследить событие появления человека в сети и быстренько запустить настоящий ICQ-клиент вместо робота.

AITap ★★★★★
()
Ответ на: комментарий от BP

поотдельности звуковые сигналы в аське не настраиваются

а ничего, что, скажем, в kopete — настраиваются?

dmiceman ★★★★★
()
Ответ на: комментарий от AITap

а зачем запускать клиента? я более чем уверен, что он девчушку караулит, а не для босса выслуживается (типа «я работаю»)

Pi ★★★★★
()
Ответ на: комментарий от Pi

> а зачем запускать клиента?
Ну не просто же так ему проснуться нужно. Подозреваю, что ещё и поговорить.

AITap ★★★★★
()

проще внести изменения в код icq клиента
и-или скажем есть консольный licq с возможностью дополнения скриптами скажем

ae1234 ★★
()
Ответ на: комментарий от AITap

Да даже проще, наверное, можно. Насколько помню, в том же пиджине можно настроить уведомления на появление в сети конкретного человека.

kss ★★★★★
()
Ответ на: комментарий от AITap

а все сообщения, пришедшие от контактов, во время работы «отслеживателя» пойдут в /dev/null? возможно, для цели отслеживания был бы эффективнее мессенджер с необходимым функционалом, либо плагин к нему

qbe
()
Ответ на: комментарий от qbe

По тому же самому условию задачи «все остальные люди» ТСа не интересуют. Можно выводить сообщения на экран или сохранять в файл.

Естественно, наиболее правильным решением была бы смена клиента на тот, в котором настраивается оповещение о появлении нужного контакта в сети.

Ждём реакции ТСа.

AITap ★★★★★
()
Ответ на: комментарий от AITap

ну значит im ТСа говно, или тяга к лисапедостроению пересиливает тягу загуглить решение за пару секунд.

silw ★★★★★
()

1- Мне неизвестно каким средством (в какой среде) и с помощью какой функции можно узнать цвет любой точки экрана в Linux

display = XOpenDisplay(NULL);
root_window = DefaultRootWindow (display);
ximage = XGetImage ( display, root_window, x,y, 1, 1, 0xFFFFFFFF, ZPixmap);
pixel = XGetPixel ( ximage, 0, 0 );
XDestroyImage (ximage);
anonymous
()
Ответ на: комментарий от anonymous

Интересный вариант - попробую закодить с ним.

Поковырять настройки Kopete- тоже неплохо. гляну что там есть. Пользуюсь QutIm. Почему отказался от пиджина и Kopete- сейчас не вспомню.

Влазить в исходники аськи- не вариант.

Спасибо за ответы, буду пробовать :)

BP
() автор топика
Ответ на: комментарий от BP

эта, а если окошко сдвинется? или там ещё чего произойдёт. Может всё-таки сделать нормально, а не лепить кривые костыли?

lazyklimm ★★★★★
()
GET http://www.icq.com/people/номер-аськи/ | grep offline.gif || echo "Проснись, @#$"
anTaRes ★★★★
()
Ответ на: комментарий от BP

> Первоначальная задача: ...

вах, ты изначально готов и Ынтерпрйзу !

x905 ★★★★★
()
Ответ на: комментарий от BP

ставлю окошко, задаю координаты, иду спать. само оно никуда не сдвинется )))


пока заставка не запустится ...

можно еще копать в сторону «Индикаторов состояния» (их обычно на сайтах размещают в контактах)

anTaRes ★★★★
()

нашел тру алгоритм как сделать на баше , достоин энтерпрайза:
1) делаем скриншот (scrot /tmp/1.jpg)
2) convert /tmp/1.jpg /tmp/1.txt
3) имеем в 1.txt строки типа
1248,799: (112,110,110) #706E6E rgb(112,110,110)
так что остается только сравнивать цвета, если цвет отличается от заранее заданного запускаем festival или что там душе угодно.

Novell-ch ★★★★★
()
Ответ на: комментарий от baverman

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

Novell-ch ★★★★★
()

Аффтар прирожденный создатель машин (забыл как называются), которые простые действия выполняют методом «длинная дорожка падающих домино толкает шар, который катится по желобу и опрокидывает фигню, которая бьет по капсюлю и выстреливает из пушки по воробью, который... бла-бла-бла банальное действие».

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

slackwarrior, предложите своё решение ))) - мне-то ведь только и нужно это «банальное действие». народ просто предлагает способы- разных и много. пнули в нужную сторону, показали примеры- буду дома- сделаю что-нибудь подходящее.

моё решение- простая прога в которой чистого кода будет от силы строк 20. это реально быстрее чем изучать все настройки всех ICQ-клиентов ( пользуюсь какой-то программой -зачем мне ставить 20 других и все их ковырять, а то ведь по этой логике можно и ось поменять если дефолтный цвет рабочего стола не понравился :) . она не идеальна, может стОит и поменять. -посмотрим ) или тем более переписывать и править исходники асек раз я не программист. Накидать несложную прогу -проще, даже учитывая что программирования никак не касался года два точно. Просто вообще время за компом стараюсь сводить к минимуму. Решение рождено по принципу -минимальные затраты и минимальные перемены.

Хотя судя по раздувшейся ветке форума- во многом вы правы :) Неплохо было бы узнать ваш вариант решения, хотя по-моему ужЕ предложенного вполне достаточно и можно понапрасну не терять на это время.

BP
() автор топика
Ответ на: комментарий от BP

Поставить Pidgin, добавить ICQ-учётку. Щёлкнуть правой кнопкой мыши по нужному контакту. Выбрать пункт «Добавить правило для собеседника». В открывшемся окошке можно будет поставить флажки при каких событиях надо исполнять действие и что собственно надо делать - от вывода на экран произвольного уведомления или отправки собеседнику сообщения до выполнения любой команды. В других нормальных IM-клиентах тоже должно быть нечто похожее (возможно, не столь функциональное).

А свои занятия быдлокодингом оставь для винды. Там полно таких программ, которые например для воспроизведения звука открывают скрытый Windows Media Player и имитируют клики мышкой по участкам окна (для нажатия нужных кнопок). Таких «программистов» надо близко не подпускать к этому занятию.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

>Там полно таких программ, которые например для воспроизведения звука открывают скрытый Windows Media Player и имитируют клики мышкой по участкам окна (для нажатия нужных кнопок).

autoit

lazyklimm ★★★★★
()
Ответ на: комментарий от anTaRes

KivApple, спасибо - за самый простой вариант. Быстро и просто. идея с логами -тоже хорошая, почему-то не догадался, но по-моему в QutIm такой возможности не видел. С «быдлокодингом» -вточку :)

Буду пользоваться пока не вылезет косяк из-за которого оставил Pidgin :) а может и не вылезет... в любом случае - вариантов море.

всем спасибо!

Можно закрыть тему. Итак уже ушла совсем не в ту степь)))

BP
() автор топика
Ответ на: комментарий от BP

> проснуться в любое время суток когда в аську выйдет нужный мне человек ( все остальные люди меня не интересуют,

Pidgin. Buddy pounces

unanimous ★★★★★
()

Виртуальные бабы — зло. Найди с кем потрахаться в реале.

anonymous
()
Ответ на: комментарий от BP

Первоначальная задача: проснуться в любое время суток когда в аську выйдет нужный мне человек ( все остальные люди меня не интересуют, а поотдельности звуковые сигналы в аське не настраиваются) : значок поменяется с красного на зелёный. мне кажется поставленная задача должна решаться легко, по крайней мере в Delphi я это быстро сделаю. Можно в крайнем и так, через Wine, если заработает.

Как должен быть устроен мозг, чтобы придумать такое решение? Не в обиду сказано.

buddhist ★★★★★
()
Ответ на: комментарий от HunOL

Спасибо! Так и знал, что он есть, но я его не заметил.

AITap ★★★★★
()
Ответ на: комментарий от BP

> проснуться в любое время суток когда в аську выйдет нужный мне человек

Может я что-то не понимаю но, что мешает этому контакту например добавить правило в том же Pidgin'е?

С легкостью добавляется правило типа «Когда входит в сеть - воспроизвести звук».

neocrust ★★★★★
()
Ответ на: комментарий от neocrust

З.Ы.: ТС, нахрена всё так усложнять, если можно в два клика добавить нужное правило в IM-клиенте? Смешной и не нужный костыль, вот серьезно.. Додумались же =]

neocrust ★★★★★
()

На CL-XMPP подобная ерунда делается за пять минут.

/thread

anonymous
()

В треде уже есть: Когда иксы выключат дисплей, скриншотер снимет черную картинку и фиг узнаешь по пикселю какой цвет у значка в IM.

minakov ★★★★★
()
Ответ на: комментарий от baverman

Окей, обзови это по другому. Через некое время, указанное у меня в гноме(например) в качестве времени отключения дисплея, появляется черный экран, который я не раз импортировал в netcat и любовался.

minakov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.