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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по SetWindowHookEx() 
:(
    Опции темы
yngwie19
Дата 13.4.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

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



Всем привет. Хочу поставить hook на клавиатуру, хочу заблокировать нажатие всех клавиш, делаю так:
Код


HWND hwnd;

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 
      SendMessage(hwnd,WM_KEYDOWN,0,0);
      SendMessage(hwnd,WM_KEYUP,0,0);
      return 0;
  
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR,int)
{
    WNDCLASS wc;
    MSG msg;
................................
.................................
hwnd = CreateWindow(......)
..........................
while(GetMessage(&msg,0,0,0);
{
    DispatchMessage(&msg);
}

    SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hInst,0);
    return 0;

}

все равно клавиши не блокируются. Что Я делаю не так?
PM MAIL   Вверх
GremlinProg
Дата 13.4.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(yngwie19 @  13.4.2009,  18:56 Найти цитируемый пост)
Что Я делаю не так?

хук ставишь после отработки программы


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
yngwie19
Дата 13.4.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

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



GremlinProg, Я его ставлю в функции WM_CREATE, нужно до GetMessage() ?
PM MAIL   Вверх
GremlinProg
Дата 13.4.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(yngwie19 @  13.4.2009,  20:05 Найти цитируемый пост)
Я его ставлю в функции WM_CREATE, нужно до GetMessage() ?

в какой WM_CREATE, у тебя же ясно написано:
Цитата(yngwie19 @  13.4.2009,  18:56 Найти цитируемый пост)

while(GetMessage(&msg,0,0,0);
{
    DispatchMessage(&msg);
}
    SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hInst,0);
    return 0;

после отработки программы
какого эффекта ты тут от него ждешь?

нужно его расположить хотя бы до исполнения цикла 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
yngwie19
Дата 13.4.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

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



GremlinProg, у меня в коде он запускается в WM_CREATE здесь Я написал маленький пример, чтобы проще было объяснить. Я его поставил перед DispatchMessage(), все равно клавиши не блокируются. 
Цитата(yngwie19 @  13.4.2009,  16:56 Найти цитируемый пост)
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 
      SendMessage(hwnd,WM_KEYDOWN,0,0);
      SendMessage(hwnd,WM_KEYUP,0,0);
      return 0;
  
}


Подскажи что Я делаю не так? что мне сделать чтобы нажатие клавиш игнорилось?
PM MAIL   Вверх
GremlinProg
Дата 13.4.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



а какой смысл приводить вдвойне ошибочный пример на свой нерабочий код?
приводи актуальный код

мне, к примеру, такие и перехват и главный цикл окна - весьма сомнительны
без TranslateMessage - у тебя и так WM_CHAR приходить не будет

поставь _RPT0("хук!!!\r\n") в процедуре перехвата
ну и позажимай кнопки backspace, enter, ctrl и т.п.
смотри в окно Output
если в нем нет "хук!!!", значит разбирай примеры из MSDN
http://www.google.com/search?client=opera&...-8&oe=utf-8
и в поиск по форуму


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
yngwie19
Дата 13.4.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

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



Я вот что подумал, а нельзя ли как-нибудь следить за буфером и как только что-то туда попадает сразу же очищать. Тогда и вставлять нечего. Подкиньке пожалуйста примерчик на эту темку
PM MAIL   Вверх
yngwie19
Дата 13.4.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

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



вот вроде нашел:
Код

if (OpenClipboard(hMainWnd))
       EmptyClipboard();


вроде ничего не копируется.
1)  Скажите эти функции нужно один раз где-нибудь написать а они постоянно будут следить за буфером и если тат что-то появится, то оно сразу уничтожится? Или надо самому следить скажем через WM_TIMER через определенное время их вызывать и проверять?
2) Скажите этих функций вроде достаточно для защиты от копирования текста, даже PrintScreen не берет, можно хуки не вешать? Или еще как-нибудь можно скопировать текст (в моем случае из RichEdit) ?
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.

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


 




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


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

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