They work both fine on their own, but when I want to use them in the same program, I get an "Invalid memory access error" when I press a key.
Does anyone know how to fix this problem. I guess it has something to do with the way I exit the hook procedure...?
Keyboard hook DLL:
Code: Select all
Global addr.l, KeyboardHook
Procedure Attachprocess(instance)
CompilerIf Defined(KBDLLHOOKSTRUCT, #PB_Structure) = 0
Structure KBDLLHOOKSTRUCT
vkCode.l
scanCode.l
flags.l
time.l
dwExtraInfo.l
EndStructure
CompilerEndIf
EndProcedure
ProcedureDLL KeyboardProc(ncode,wparam,lparam)
Static position
*keycode.KBDLLHOOKSTRUCT=lparam
If wParam = #WM_RBUTTONDOWN
k.l=1001
PokeL(addr,k)
EndIf
If wParam = #WM_LBUTTONDOWN
k.l=1002
PokeL(addr,k)
EndIf
If wParam = #WM_KEYDOWN
vk = *keycode\vkCode
k.l = MapVirtualKeyEx_(vk,2,0)
If vk=160
k = 999
EndIf
PokeL(addr,k)
EndIf
If wParam = #WM_KEYUP
vk = *keycode\vkCode
If vk=160
k = 1000
Else
k = 0
EndIf
PokeL(addr,k)
EndIf
ProcedureReturn CallNextHookEx_(KeyboardHook, Code, wParam, lParam )
EndProcedure
ProcedureDLL InitKeyHook(value, hookproc)
InitMouse()
addr = value
KeyboardHook=hookproc
EndProcedureCode: Select all
Global addr.l, MouseHook
Procedure Attachprocess(instance)
CompilerIf Defined(MSLLHOOKSTRUCT, #PB_Structure) = 0
Structure MSLLHOOKSTRUCT
pt.POINT;
mouseData.l;
flags.l;
time.l;
dwExtraInfo.l;
EndStructure
CompilerEndIf
EndProcedure
ProcedureDLL MouseProc(ncode,wparam,lparam)
Static mMouseInput.MSLLHOOKSTRUCT
CopyMemory(lparam,@mMouseInput,SizeOf(MSLLHOOKSTRUCT))
k=0
If ncode = #HC_ACTION And wParam
Select wParam
Case #WM_LBUTTONDOWN
k=1000
Case #WM_LBUTTONUP
k=1001
Case #WM_RBUTTONDOWN
k=1002
Case #WM_RBUTTONUP
k=1003
Case #WM_MOUSEMOVE
k=1004
Case #WM_MOUSEWHEEL
k=1005
EndSelect
EndIf
PokeL(addr,k)
ProcedureReturn CallNextHookEx_(MouseHook, nCode, wParam, lParam )
EndProcedure
ProcedureDLL InitMouseHook(value, hookproc)
addr = value
MouseHook=hookproc
EndProcedure
Code: Select all
KeyHookLib = OpenLibrary(0,"C:\Documents and Settings\janbeek\Mijn documenten\GetKeyb.dll")
If KeyHookLib
KeyProc=GetFunction(0, "KeyboardProc")
KeyboardHook=SetWindowsHookEx_(#WH_KEYBOARD_LL, KeyProc, KeyHookLib, 0)
CallFunction(0, "InitKeyHook", @AKey, KeyboardHook)
Else
End
EndIf
MouseHookLib = OpenLibrary(0,"C:\Documents and Settings\janbeek\Mijn documenten\GetMouse.dll")
If MouseHookLib
MouseProc=GetFunction(0, "MouseProc")
MouseHook=SetWindowsHookEx_(#WH_MOUSE_LL, MouseProc, MouseHookLib, 0)
CallFunction(0, "InitMouseHook", @AMouse, MouseHook)
Else
End
EndIf


