Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить нажатие Prin Screen 
V
    Опции темы
ecspertiza
Дата 21.12.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Знаю что кроссплатформенного способа нет, поэтому решил писать реализацию под каждую ОС. Но и это оказалось не просто smile Нашел код кейлогера под венду, но и он ни Prin Screen ни Ctrl+Print Screen отловить не может. Можно ли вообще перехватить комбинации клавиш  Ctrl+Print Screen и\или 
Shift +Ctrl+Print Screen ? и если можно то как ? 


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
boostcoder
Дата 21.12.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: нет
Всего: 110



это же системное программирование. по вендусной теме нужно было создавать тему в вендусном разделе. по линуксячей - в линуксячем. по маковой - в маковом.
PM WWW   Вверх
ecspertiza
Дата 21.12.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Так и думал smile Попросим админов перенести в раздел "C/C++: Системное программирование и WinAPI". Хотя интересно вроде такая простая операция, но решения сходу не нашел.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
ecspertiza
Дата 21.12.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



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


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
boostcoder
Дата 21.12.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: нет
Всего: 110



вот для вендус: http://answers.google.com/answers/threadview/id/133059.html

Добавлено через 5 минут и 1 секунду
для линукс, наверное самым простым способом будет чтение девайса клавиатуры. никаких суперправ для этого не нужно.
http://stackoverflow.com/questions/2775461...ring-dev-inputx
PM WWW   Вверх
bsa
Дата 21.12.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Цитата(boostcoder @  21.12.2011,  14:37 Найти цитируемый пост)
для линукс, наверное самым простым способом будет чтение девайса клавиатуры. никаких суперправ для этого не нужно.

не самое разумное решение...
Может лучше это: http://stackoverflow.com/questions/50182/l...eating-a-window
PM   Вверх
ecspertiza
Дата 21.12.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Вендовый пример, видел до того как ты ссылку скинул, и попробовал, он не работал, после того как ты ссылку скинул,я решил еще раз проверить, все заработало smile Аура наверное у тебя хорошаяsmile или руки у меня кривые


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
boostcoder
Дата 21.12.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: нет
Всего: 110



bsa, зачем ему для чтения клавы, лезть в дебри X сервера? хоть один плюс аргументируй. (кроме как для расширения кругозора)

Добавлено через 41 секунду
Цитата(ecspertiza @  21.12.2011,  13:46 Найти цитируемый пост)
Аура наверное у тебя хорошая

да. с аурой мы в сговоре.
PM WWW   Вверх
bsa
Дата 21.12.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Цитата(boostcoder @  21.12.2011,  14:49 Найти цитируемый пост)
хоть один плюс аргументируй.

1. надо искать среди эвентов ту клаву, которую юзает пользователь.
2. были у меня проблемы с клавой, когда я работал с ней через event. Причем, с PS/2 проблем не было, а от USB клавы ничего не получал.
При работе с X сервером этих проблем нет.
PM   Вверх
boostcoder
Дата 21.12.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: нет
Всего: 110



Цитата(bsa @  21.12.2011,  14:12 Найти цитируемый пост)
1. надо искать среди эвентов ту клаву, которую юзает пользователь.

вариант..

PM WWW   Вверх
ecspertiza
Дата 22.12.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Столкнулся с небольшой проблемой, с кодом который кинул bsa, отлавливает события хорошо, но он ловит всю клаву, и не дает выполнять обычный набор текста к примеру, как бы вернуть выполнение событий системе если это не нужная мне клавиша ?

я пробовал так

Код

    while(!m_stop) {
       XNextEvent(dpy, &ev);
       switch (ev.type) {
          case KeyPress:
             kc = ((XKeyPressedEvent*)&ev)->keycode;
             s = XKeysymToString(XKeycodeToKeysym(dpy, kc, 0));

             if (!strcmp(s, "Print") && ctrlmodified && shiftmodified) {
                emit keyPress(HookKeybord::Print | HookKeybord::Shift | HookKeybord::Ctrl);
                continue;
             }

             if (!strcmp(s, "Print") && ctrlmodified) {
                emit keyPress(HookKeybord::Print | HookKeybord::Ctrl);
                continue;
             }

             if (!strcmp(s, "Print") && shiftmodified) {
                emit keyPress(HookKeybord::Print | HookKeybord::Shift);
                continue;
             }

             if (!strcmp(s, "Print")) {
                emit keyPress(HookKeybord::Print);
                continue;
             }

             XUngrabKeyboard(dpy, CurrentTime);
             XPutBackEvent(dpy, &ev);
             XGrabKeyboard(dpy, DefaultRootWindow(dpy),
                           true, GrabModeAsync, GrabModeAsync, CurrentTime);
             break;
          case Expose:
                while (XCheckTypedEvent(dpy, Expose, &ev)) /* empty body */ ;
             break;
          case ButtonPress:
          case ButtonRelease:
          case KeyRelease:

          case MotionNotify:
          case ConfigureNotify:
          default:
             break;
       }
    }


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


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
bsa
Дата 22.12.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



смотри QApplication::x11EventFilter.
PM   Вверх
ecspertiza
Дата 25.12.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



Спасибо всем за помощь. QApplication::x11EventFilter не помог ибо он клавиатуру не ловит. Но нашелся вариант с XSendEvent описал вот тут

https://sites.google.com/site/ecspertiza/st...int-screen-v-qt


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.