loginz
Зарегистрирован: 22.04.2010 Сообщения: 1
|
Добавлено: Чт Апр 22 2010 04:16 Заголовок сообщения: проблема с SetWindowsHookEx |
|
|
Здравствуйте!
Не нашел в форумах ответ, поэтому создаю тему!
при вызове функции 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);
}
}
=============================== |
|