2015-07-12 29 views
0

我想寫計數在Windows的鼠標點擊次數的應用程序。經過一番研究,我發現這個庫:MouseKeyHook 我已經WPF應用程序中創建和複製的示例代碼:使用WPF庫mousekeyhook計數點擊 - LoaderLock錯誤

public partial class MainWindow : Window 
{ 
    private IKeyboardMouseEvents m_GlobalHook; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     Subscribe(); 
    } 

    public void Subscribe() 
    { 
     // Note: for the application hook, use the Hook.AppEvents() instead 
     m_GlobalHook = Hook.GlobalEvents(); 

     m_GlobalHook.MouseDownExt += GlobalHookMouseDownExt; 
     m_GlobalHook.KeyPress += GlobalHookKeyPress; 
    } 

    private void GlobalHookKeyPress(object sender, KeyPressEventArgs e) 
    { 
     Console.WriteLine("KeyPress: \t{0}", e.KeyChar); 
    } 

    private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e) 
    { 
     Console.WriteLine("MouseDown: \t{0}; \t System Timestamp: \t{1}", e.Button, e.Timestamp); 

     // uncommenting the following line will suppress the middle mouse button click 
     // if (e.Buttons == MouseButtons.Middle) { e.Handled = true; } 
    } 

    public void Unsubscribe() 
    { 
     m_GlobalHook.MouseDownExt -= GlobalHookMouseDownExt; 
     m_GlobalHook.KeyPress -= GlobalHookKeyPress; 

     //It is recommened to dispose it 
     m_GlobalHook.Dispose(); 
    } 
} 

有沒有錯誤或警告,並且應用程序檢測輸入的點擊和按鍵。但是點擊幾下後,我得到的錯誤信息:

enter image description here

有時候,這個錯誤後,只需點擊幾下後表示,有時在100次點擊(MouseDown事件 - 鼠標左鍵)。此外,當錯誤發生時,我的光標顯着減速幾秒鐘。

+0

請在頁面底部的'查看詳細信息'鏈接上點擊錯誤信息,然後將錯誤信息粘貼到內部例外字段中。 – Alireza

+1

這MDA有假警報的訣竅,也沒有在很長一段時間看到它。使用調試>例外>託管調試助手> LoaderLock並取消選中Thrown複選框。如果有的話,看看接下來有什麼風扇。真正的問題可能與您的反惡意軟件防護有關,他們通常不喜歡鍵盤記錄器那麼多。 –

+0

@HansPassant你的解決方案的工作原理。我改變了這個LoaderLock異常,不拋出,現在我的應用程序沒有任何錯誤。謝謝! – user3662546

回答

0

嘗試創建不同的線程比主胡克對象。在DllMain中運行並阻止GUI的代碼時,通常會出現此問題。