2012-02-09 78 views
0

我正在使用通過com自動化Excel的應用程序。 我遇到的問題是,有時當用戶按下某些鍵盤按鈕時,Excel會竊取焦點並進入單元格編輯狀態,這會導致我的應用程序崩潰。 防止鍵盤消息到達Excel的最佳方法是什麼? 我試過CBT鉤子和GetMessage鉤子失敗。還有其他方法嗎?防止鍵盤消息到達應用程序

回答

0

Excel 2010的應用程序對象具有Interactive屬性。將其設置爲false,Excel將阻止除顯示的任何對話框之外的所有鍵盤和鼠標輸入。

Application.Interactive = False 

我不知道當加入Interactive但我不認爲它在Excel 2000中

+0

這是個好主意!從未考慮過使用Google進行搜索。它被添加到Excel 2007 – SparcU 2012-02-11 13:45:22

+0

@SparcU中,您可能還想使用Application.Cursor = xlWait來將鼠標指針更改爲沙漏。完成後請不要忘記將其重新設置爲「xlDefault」。 – mischab1 2012-02-12 16:58:08

0

最簡單的方法可能是使用BlockInput(),它可以阻止整個桌面上的鼠標和鍵盤輸入:如果您想在短時間內阻止用戶,這非常有用。

或者,如果你只是想到達一個特定的EXE阻止輸入,使用SetWindowsHookEx(WH_KEYBOARD_LL, ...) - 每MSDN,你可以返回-1從HOOKPROC造成被忽略的輸入:

如果NCODE較大大於或等於零,[...]如果鉤子程序處理了消息,它可能會返回一個非零值,以防止系統將消息傳遞給鉤子鏈或目標窗口過程的其餘部分。

WH_KEYBOARD_LL掛鉤的一個很好的功能是它們不需要單獨的DLL,你可以在自己的EXE中做所有事情。但只能使用它對抗Excel應用程序的threadID;如果你有應用程序的HWND,使用GetWindowThreadID()來獲取。

+0

WH_KEYBOARD_LL存在不與當地掛鉤工作。只有全球。所以,當我安裝它會減慢計算機上的一切 – SparcU 2012-02-10 14:57:09

+0

這是一個好主意。帶DLL的WH_KEYBOARD hook解決了我的問題 – SparcU 2012-02-10 15:59:47