Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хуки, Как создать и внедрить хук в Windows 
:(
    Опции темы
Ares27
Дата 6.10.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.10.2008

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



Всем привет! Необходимо создать хук, который бы перехватывал сообщения нажатия клавиш из всех приложений в Windows. И затем передавал код клавишы в программу! Если кто работал с этим, помогите плз!  smile 
PM MAIL   Вверх
Partizan
Дата 6.10.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Ares27, Читать MSDN на тему SetWindowsHookEx


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Magnetic
Дата 6.10.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

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



На сайте codeproject можно найти готовые примеры использования хуков с классами, которые предоставляют удобный интерфейс для использования хуков без знания winapi.
--------------------
Dude, where's my car?
PM MAIL   Вверх
S1oven
Дата 30.4.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

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



Блин. Прочитал мсдн. покурил codeproject, взял оттуда исходник. Вопрос почему у меня не получается перехватить комбинацию клавишь. 

Пытаюсь перехватить ctrl+c

Код

public int hookProc(int code, IntPtr wParam, IntPtr lParam) 
{
            if ((code >= 0) && (CurrentProfile != null))
             {
                foreach (SubjectEntity s in CurrentProfile)
                {

                    int vkCode = Marshal.ReadInt32(lParam);
                    Keys key = (Keys)vkCode;

                    
                    if ((wParam == (IntPtr)WM_KEYDOWN)||(wParam == (IntPtr)WM_SYSKEYDOWN))
                    {
                        if (Keys.C == key && Keys.Control == Control.ModifierKeys) 
                        {
                            if (GeneralHotKeyPressed != null)
                            {
                                GeneralHotKeyPressed(this, s);
                                modFlag = 0;
                                return 1;
                            }
                        }
                    }
                }
                
            }
            return CallNextHookEx(hhook, code, wParam, lParam);
        }


Совет так проверять (if (Keys.C == key && Keys.Control == Control.ModifierKeys) ) взял отсюда http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx. Не работает. 

Что я тут уже не выдумывал. Не могу я увидеть комбинацию КЛАВИША | МОДИФИКАТОР. может lParam не всё содержит? Он кстати хранит только последне-нажатую клавишу. Нажму я например ctrl+alt он содержит код только alt.

Ещё момент, почему когда нажму на клавишу win, то (Keys)Marshal.ReadInt32(lParam) == 91? Кода 91 нет вообще в перечислении keys. 
PM MAIL   Вверх
S1oven
Дата 6.5.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

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



up
PM MAIL   Вверх
S1oven
Дата 12.5.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

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



up
PM MAIL   Вверх
Partizan
Дата 17.5.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



 if ((key & Keys.C == Keys.C) && Keys.Control == Control.ModifierKeys) 

Вообще бы точно знать какая из частей выражения возвращает false.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




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


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

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