Chazwazza
November 30th, 2006, 05:45 PM
I have the following code in a DLL to set a global keyboard hook and it seems to return properly, but it never calls my HookProc.
#include <windows.h>
#include "main.h"
#pragma data_seg(".hookstuff")
HHOOK KeyHook = NULL;
HWND MyHwnd = NULL;
HINSTANCE g_hInstance = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.hookstuff,rws")
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
g_hInstance = hInstance;
return TRUE;
}
MYDLL_API void InstallHook(HWND h)
{
MyHwnd = h;
KeyHook = SetWindowsHookEx(WH_KEYBOARD,HookProc,g_hInstance,0);
if(KeyHook == NULL)
{
MessageBox(MyHwnd,"Unable to install hook","Error!",MB_OK);
}
}
MYDLL_API void RemoveHook()
{
UnhookWindowsHookEx(KeyHook);
}
MYDLL_API LRESULT CALLBACK HookProc(int ncode,WPARAM wparam,LPARAM lparam)
{
if(ncode>=0)
{
if((lparam & 0x80000000) == 0x00000000)//Check whether key was pressed(not released).
{
SendMessage(MyHwnd,WM_USER+755,wparam,lparam);//Send info to app Window.
}
}
return (CallNextHookEx(KeyHook,ncode,wparam,lparam) );//pass control to next hook in the hook chain.
}
#include <windows.h>
#include "main.h"
#pragma data_seg(".hookstuff")
HHOOK KeyHook = NULL;
HWND MyHwnd = NULL;
HINSTANCE g_hInstance = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.hookstuff,rws")
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
g_hInstance = hInstance;
return TRUE;
}
MYDLL_API void InstallHook(HWND h)
{
MyHwnd = h;
KeyHook = SetWindowsHookEx(WH_KEYBOARD,HookProc,g_hInstance,0);
if(KeyHook == NULL)
{
MessageBox(MyHwnd,"Unable to install hook","Error!",MB_OK);
}
}
MYDLL_API void RemoveHook()
{
UnhookWindowsHookEx(KeyHook);
}
MYDLL_API LRESULT CALLBACK HookProc(int ncode,WPARAM wparam,LPARAM lparam)
{
if(ncode>=0)
{
if((lparam & 0x80000000) == 0x00000000)//Check whether key was pressed(not released).
{
SendMessage(MyHwnd,WM_USER+755,wparam,lparam);//Send info to app Window.
}
}
return (CallNextHookEx(KeyHook,ncode,wparam,lparam) );//pass control to next hook in the hook chain.
}