Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 05:24   #1
loginz
Новичок
Джуниор
 
Регистрация: 22.04.2010
Сообщений: 2
По умолчанию проблема SetWindowsHookSet

Здравствуйте!
Не нашел в форумах ответ, поэтому создаю тему!
при вызове функции SetWindowsHookEx: функция-обработчик KeyboardProc содержит одни и те же коды нажатых клавиш. (в файле "key.log" одна и таже повторяющаяся битовая последовательность для разных нажатий, см. ниже)

Почему? Что не так в коде? подскажите пожалуйста.
Система vista 64. Borland 2009
================================
код dll:
Код:
#include <windows.h> 
#include <fstream.h> 
#pragma argsused 

struct keys{ 
int code; 
WPARAM wParam; 
LPARAM lParam;}; 

keys sym; 
int count=0; 

extern "C" __declspec(dllexport) LPARAM CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam) 
{ 
if (wParam == WM_KEYDOWN) { 

sym.code = code; 
sym.wParam = wParam; 
sym.lParam = lParam; 

ofstream out("key.log", ios::app); 

if (out == 0) { MessageBoxA(0, "Error open file", "Error open file", 0); } 

out.write((char *)&sym, sizeof(keys)); 
out.close(); 
} 

return CallNextHookEx(0, code, wParam, lParam); 
} 

============================================ 

фрагмент кода программы (при нажатии Button1 устанавливаем хук): 
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 

static HHOOK hhook; 
static HINSTANCE hlib = LoadLibrary((LPCTSTR) "..\\..\\..\\dll\\debug\\Project1.dll"); 

if (!hlib) { MessageBox(0, "Error", "ErrorLoad dll", 0); } 

static HOOKPROC mykey = (HOOKPROC)GetProcAddress(hlib, "KeyboardProc"); 

if (!mykey) { MessageBox(0, "Error", "ErrorLoad function", 0); } 

hhook = SetWindowsHookEx(WH_KEYBOARD_LL, mykey, hlib, NULL); 

Form1->SpinEdit1->Value = (LPARAM)hhook; 

if ( !hhook ) { 
MessageBox(0, "Error", "ErrorLoad hook", 0); 

} 

}
===============================

Последний раз редактировалось Stilet; 22.04.2010 в 07:43.
loginz вне форума Ответить с цитированием
Старый 22.04.2010, 18:14   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а что это у вас за странная структура и для чего она нужна?

Код:
struct keys{ 
int code; 
WPARAM wParam; 
LPARAM lParam;};

Могу посоветовать обратиться за помощью в MSDN.

KeyboardProc (WH_KEYBOARD)

LowLevelKeyboardProc (WH_KEYBOARD_LL)
counter вне форума Ответить с цитированием
Старый 24.04.2010, 06:11   #3
loginz
Новичок
Джуниор
 
Регистрация: 22.04.2010
Сообщений: 2
По умолчанию

Это я ее просто сделал, чтобы сохранять параметры функции KeyboardProc для сравнения.

Мне уже подсказали на другом форуме, что lParam - это указатель в функции LowLevelKeyboardProc. А это уже меняет дело. Все получилось.
loginz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37