![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Guest |
|
|||
|
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 |
|
|||
|
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 |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Вот в этом разделе FAQ по С++ подробный туториал как перехватывать сообщения с клавы.
-------------------- ![]() |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
вот тут есть ссылка на примеры, там есть ссылка на хук...
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |