private int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
int tempHandle = (int)GetActiveWindow();
// The lparam that Windows passes us is a pointer to a
// KbDllHookStruct.
KbDllHookStruct kbDllHookStruct = (KbDllHookStruct)Marshal.PtrToStructure(lParam, typeof(KbDllHookStruct));
if (autoCompleteForm.Visible)
{
// Log only UI shortcut keys
if ((wParam == (IntPtr)WM.KEYDOWN)
|| (wParam == (IntPtr)WM.SYSKEYDOWN))
{
// Logging for user testing
appendLogString(kbDllHookStruct.vkCode);
}
}
// Response to keystrokes only if the active window is the text-editor (Microsoft Word)
if (handle == tempHandle && isEnabled)
{
if ((wParam == (IntPtr)WM.KEYDOWN)
|| (wParam == (IntPtr)WM.SYSKEYDOWN))
{
if (extMode.isExtensionMode())
{
// Logging for user testing
appendLogString(kbDllHookStruct.vkCode);
bool result = handleExtensionMode(kbDllHookStruct);
bool isBlockKey = !result;
if (isBlockKey)
{
extendSuggestionForm.fadeOut();
return -1;
}
}
else
{
bool result = handleRequestSuggestionMode(kbDllHookStruct);
bool isBlockKey = !result;
if (isBlockKey)
{
return -1;
}
}
}
}
return CallNextHookEx(keyboardHookHandle, nCode, wParam, lParam);
}