Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание hook для клавиатуры 
:(
    Опции темы
Guest
Дата 7.2.2004, 15:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пытаюсь самым обычным образом перехватить сообщения с клавиатуры, однако вызова функции как таковой не происходит. Явно что-то делаю не так ;). Может кто подскажет или скинет исходник.


HHOOK hook;

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
FILE *f;


if((f=fopen("c:\\logfile.txt","a"))!=NULL)
{
fputc(MapVirtualKey(wParam,2),f);
fclose(f);
}


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

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, (HINSTANCE)NULL, GetCurrentThreadId());
}
  Вверх
Unregistered
Дата 7.2.2004, 17:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












#define MYHOOKDLL_API __declspec(dllexport)

#include <windows.h>

extern "C"
{
MYHOOKDLL_API int SetHook( HWND,UINT );
MYHOOKDLL_API int UnSetHook();
}


#include "MyHookDll.h"

// Глобальные переменные
HINSTANCE hInstance = NULL; // The instance of the DLL

// Описание нашей хук-функци
LRESULT CALLBACK KeyboardMsgProc ( int, WPARAM, LPARAM );


#pragma data_seg(".SData")
HHOOK hMsgHook = NULL; // Handle нашего хука
UINT KBoardMessage = NULL; // Сообщение, которое мы будем посылать родительскому приложению
HWND hParentWnd = NULL; // Окно родительского приложения
#pragma data_seg( )

//Директива линкеру создать разделяемую(shared) секцию с атрибутами RWS
#pragma comment(linker,"/SECTION:.SData,RWS")

// Далее, обычная DllMain
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
hInstance = (HINSTANCE)hModule;

return TRUE;
}

// Две функции SetHook и UnsetHook

MYHOOKDLL_API int SetHook (HWND hWnd, // window which should receive notification messages
UINT UpdateMsg) // notification message
{
if (hWnd == NULL) return -1;

// Save received parameters
hParentWnd = hWnd;
KBoardMessage = UpdateMsg;

// Set hook
hMsgHook= ::SetWindowsHookEx (WH_GETMESSAGE, KeyboardMsgProc, hInstance, 0);

// If we are failed...
if (hMsgHook == NULL)
return -1;

return 0;
};

MYHOOKDLL_API int UnSetHook()
{
UnhookWindowsHookEx (hMsgHook);

hMsgHook = NULL;

return 0;
};

LRESULT CALLBACK KeyboardMsgProc (int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
MSG * msg = (MSG * )lParam;

if ((lParam)
&&(msg->message == WM_CHAR)
&&(wParam == PM_REMOVE))

PostMessage (hParentWnd, KBoardMessage, msg->wParam, 0 );
}

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




  Вверх
mr.DUDA
Дата 7.2.2004, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Вот в этом разделе FAQ по С++ подробный туториал как перехватывать сообщения с клавы.


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 8.2.2004, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



вот тут есть ссылка на примеры, там есть ссылка на хук...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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