// Callback function for Keyboard hook. private static IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { IntPtr active = GetForegroundWindow(); if (active.Equals(self.MainWindowHandle)) { currDoc = ThisAddIn.getCurrDocument(); if (!typing) { // Register place for starting typing. typing = true; selStart = currDoc.Application.Selection.Start; } int vkCode = Marshal.ReadInt32(lParam); //Messenger.message(((Keys)vkCode).ToString()); resetTimer(); } } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }
public static void message(String msg) { Word.Document doc = ThisAddIn.getCurrDocument(); Word.Range rng = doc.Range(0, 0); rng.Text = msg; }
// Callback function for Keyboard hook. private static IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { IntPtr active = GetForegroundWindow(); if (!(active.Equals(self.MainWindowHandle) || active.Equals(GUIManager.GUIHandle))) { inputStatus = KEYBOARD_IDLE; GUIManager.disappear(); } #region KeyCheck else { currDoc = ThisAddIn.getCurrDocument(); int vkCode = Marshal.ReadInt32(lParam); if (active.Equals(GUIManager.GUIHandle)) { hotkeyTimer.Start(); int maxCount = tempList.Count - wrappedPage * REFERENCE_PER_PAGE - 1; if (vkCode == KeyboardMapping.Keys["1"]) { selectedItem = Math.Min(0, maxCount); } else if (vkCode == KeyboardMapping.Keys["2"]) { selectedItem = Math.Min(1, maxCount); } else if (vkCode == KeyboardMapping.Keys["3"]) { selectedItem = Math.Min(2, maxCount); } else if (vkCode == KeyboardMapping.Keys["4"]) { selectedItem = Math.Min(3, maxCount); } else if (vkCode == KeyboardMapping.Keys["5"]) { selectedItem = Math.Min(4, maxCount); } else if (vkCode == KeyboardMapping.Keys["VK_LEFT"]) { if (wrappedPage > 0) { wrappedPage -= 1; } selectedItem = 0; } else if (vkCode == KeyboardMapping.Keys["VK_RIGHT"]) { if (wrappedPage < maxPage) { wrappedPage += 1; selectedItem = 0; } else { selectedItem = maxCount; } } GUIManager.chooseItem(selectedItem, wrappedPage); } if (inputStatus == KEYBOARD_IDLE) { // Register place for starting typing. inputStatus = KEYBOARD_TYPING; Messenger.message("User is Typing!"); selStart = currDoc.Application.Selection.End; //start Timer resetTimer(); } else if (inputStatus == KEYBOARD_TYPING) { resetTimer(); } else if (inputStatus == KEYBOARD_PREFLISTSHOWED) { if (checkHotKey(vkCode, extendSentenceHotKey, 1)) { string extending = tempList[wrappedPage * REFERENCE_PER_PAGE + selectedItem].getContent(); sentenceLength.Add(extending.Length); int tempPos = selEnd; // Print string currDoc.Application.Selection.Start = selEnd; currDoc.Application.Selection.End = selEnd; currDoc.Application.Selection.TypeText(extending); // Move cursor selEnd = tempPos + extending.Length; selStart = tempPos; rng = currDoc.Range(selStart, selEnd); rng.Select(); Messenger.message("Sentence Extended!"); } else if (checkHotKey(vkCode, deleteSentenceHotKey, 4)) { if (sentenceLength.Any()) { int lastAdded = sentenceLength.Count - 1; selStart = selEnd - sentenceLength[lastAdded]; rng = currDoc.Range(selStart, selEnd); rng.Delete(); sentenceLength.RemoveAt(lastAdded); if (sentenceLength.Any()) { lastAdded = sentenceLength.Count - 1; selEnd = selStart; selStart = selEnd - sentenceLength[lastAdded]; rng = currDoc.Range(selStart, selEnd); rng.Select(); } else { selEnd = selStart; rng = currDoc.Range(selStart, selEnd); rng.Select(); } Messenger.message("Sentence Reverted!"); } else { Messenger.message("Nothing extended yet!"); } } else if (vkCode == KeyboardMapping.Keys["SPACE"]) { Messenger.message("KeyboardStatRestored!\n"); selStart = selEnd; rng = currDoc.Range(selStart, selEnd); rng.Select(); GUIManager.disappear(); inputStatus = KEYBOARD_TYPING; sentenceLength = new List <int>(); } } } #endregion } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }