2016-09-01 11 views
1

키보드 후크는 MS Word에서 여러 번 화재가

더크 볼 마르가 제공하는 대답은 작동하지만 Detecting text changes in Word 2016 from VSTO add-in에 묻는 질문에 참조, 나는 하나의 키 트리거 KeyboardHookCallBack 10 ~ 12 번 타격 내가 아니다 것으로 나타났습니다 키가 입력되는 순서를 정확하게 캡처 할 수 있습니다. 내 질문에 어리 석었지만 KeyboardHookCallBack이 각 키에 대해 한 번만 트리거되도록하는 방법이 있습니까? 나는 행운이없이 당분간이 노력을 해왔다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

답변

0

내 요구 사항은 MS Word에서 intellisense로 자동 완성 기능을 구현하는 것이 었습니다. 나는 사용자가 스페이스 바를 눌렀을 때마다 스페이스 바를 마지막으로 쳤을 때부터 사용자가 누른 키를 추적해야한다고 결정했다. Detecting text changes in Word 2016 from VSTO add-in에있는 솔루션을 기반으로 키가 올바른 순서로 눌러지지 않았고 후크 콜백이 여러 번 실행되었습니다. 문제를 해결하기위한 더러운 방법을 찾았지만 해결책은 완전한 것이 아닙니다. 며칠을 보낸 후 해결 방법을 찾았고이 문제가 해결되어야한다고 생각합니다. 여기에 간다 :

private IntPtr KeyboardHookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
    string key = ((System.Windows.Forms.Keys)wParam).ToString‌(); 
    if (key == "Space") 
    { 
     Word.Selection sel = Globals.ThisAddIn.Application.Selection; 
     Word.Range rng = sel.Range.Paragraphs[1].Range; 
     object unitWord = Word.WdUnits.wdWord; 
     object countN1 = -1; 
     sel.MoveStart(ref unitWord, ref countN1); 
     string userInput = sel.Words[1].Text; 
     sel.MoveRight(ref unitWord, ref missing, ref missing); 
    } 
} 

희망이 모든 사람들이 비슷한 문제로 고민하는 데 도움이됩니다.

+0

hookcall이 여러 번 실행되는 것과 동일한 문제가 발생합니다. 어떻게 이것을 해결 했습니까? – Selwyn