2011年8月3日

解決在Windows 7/Vista上跑.NET 1.1/1.0 程式按功能鍵:出現「無法建立攔截程序(Hook)」錯誤

問題的來龍去脈

當你在Win Vista/7上跑舊版的.NET 1.0 或 1.1 的Windows form程式,按下功能鍵時,出現錯誤「無法建立攔截程序Hook」,如下視窗:
image

問題的發生原因

問題是出在System.Windows.Forms.SendKeys.Send 方法,SendKeys 類別預設會嘗試使用全域日誌攔截程序。在UAC 服務已啟動時,這個攔截程序就沒有登入 Windows Vista/7 的權限,因此產生以上錯誤。

問題的解決方法

  1. 關掉UAC,適用.NET1.0/1.1,操作如下: 【控制台】→【使用者帳戶和家庭】→【使用者帳號】→【變更使用者帳號控制設定】
    image
    設定【不要通知】,按【確定】,就完成了。
  2. 套用GDR,適用.NET 1.1 ,首先立即下載 KB925168 套件。 這 GDR 會更新 .NET Framework 1.1。
    套用該套件後.NET Framework 1.1 會改為呼叫 User32 SendInput API,而不會建立全域日誌攔截程序,便可解決這個問題。

參考:

KB925168

沒有留言:

張貼留言