2013-05-27 39 views
1

我確實在我的Form1的頂部:我怎麼能全局性地鉤全局鍵和所有的鼠標按鈕?

using Gma.UserActivityMonitor; 

隨後宣佈:

Gma.UserActivityMonitor.GlobalEventProvider actHook = new GlobalEventProvider(); 
在Load事件中,我做了

然後:

actHook.MouseClick += actHook_MouseClick; 

然後在底部:

private void actHook_MouseClick(object sender, MouseEventArgs e) 
     { 
      if (e.Clicks > 0) 
      { 
       MessageBox.Show("hi"); 
      } 
     } 

但一旦我前一秒鐘裝東西我得到的文件異常後運行我的應用程序:HookManager.Callbacks.cs

在線:

throw new Win32Exception(errorCode); 

異常:指定的模塊不能被發現

System.ComponentModel.Win32Exception was unhandled 
    HResult=-2147467259 
    Message=The specified module could not be found 
    Source=ScreenVideoRecorder 
    ErrorCode=-2147467259 
    NativeErrorCode=126 
    StackTrace: 
     at Gma.UserActivityMonitor.HookManager.EnsureSubscribedToGlobalMouseEvents() in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\HookManager.Callbacks.cs:line 236 
     at Gma.UserActivityMonitor.HookManager.add_MouseClick(MouseEventHandler value) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\HookManager.cs:line 69 
     at Gma.UserActivityMonitor.GlobalEventProvider.add_MouseClick(MouseEventHandler value) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\GlobalEventProvider.cs:line 71 
     at ScreenVideoRecorder.Form1.Form1_Load(Object sender, EventArgs e) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\Form1.cs:line 47 
     at System.Windows.Forms.Form.OnLoad(EventArgs e) 
     at System.Windows.Forms.Form.OnCreateControl() 
     at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
     at System.Windows.Forms.Control.CreateControl() 
     at System.Windows.Forms.Control.WmShowWindow(Message& m) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
     at System.Windows.Forms.ContainerControl.WndProc(Message& m) 
     at System.Windows.Forms.Form.WmShowWindow(Message& m) 
     at System.Windows.Forms.Form.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    InnerException: 

什麼或哪個模塊找不到?

我下載了版本2的源代碼。 並從硬盤上的Gma.UserActivityMonitor目錄中添加所有文件.cs。

我沒有收到錯誤信息,因此可能會發生什麼?

+0

嘗試尋找這個名爲CodePlex的網站http://globalmousekeyhook.codeplex.com/您展示鏈接只是爲了一個KeyboardHook –

+0

馬克啊好的,謝謝,我會去看看 –

+0

好吧,我試了鏈接中的代碼,我做了他所說的要做但當我運行我的應用程序時,我正在嘗試一個例外關注某人的問題並回答如何解決問題,但目前爲止還沒有成功。請拍下我正在更新我的問題。 –

回答

3

我只是從GlobalMouseKeyHook CodePlex網站downloaded the file提取它,然後我將MouseKeyboardActivityMonitor.dll添加到我的項目。然後我添加了使用引用到表單。我正在運行Visual Studio 2010 Pro,其目標是.Net 4客戶端配置文件。我有沒有問題

這是一個工作示例(此代碼是從GlobalMouseKeyHook演示項目中修改:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using MouseKeyboardActivityMonitor; 
using MouseKeyboardActivityMonitor.WinApi; 

namespace WindowsFormsApplication1 
{ 

    public partial class Form1 : Form 
    { 
     private readonly KeyboardHookListener m_KeyboardHookManager; 
     private readonly MouseHookListener m_MouseHookManager; 
     public Form1() 
     { 
      InitializeComponent(); 
      m_KeyboardHookManager = new KeyboardHookListener(new GlobalHooker()); 
      m_KeyboardHookManager.Enabled = true; 
      m_KeyboardHookManager.KeyDown += HookManager_KeyDown; 
      m_KeyboardHookManager.KeyUp += HookManager_KeyUp; 



      m_MouseHookManager = new MouseHookListener(new GlobalHooker()); 
      m_MouseHookManager.Enabled = true; 
      m_MouseHookManager.MouseDown += HookManager_MouseDown; 
      m_MouseHookManager.MouseUp += HookManager_MouseUp; 

     } 

     private void HookManager_KeyDown(object sender, KeyEventArgs e) 
     { 
      label1.Text = e.KeyData.ToString() + " Pressed"; 
     } 

     private void HookManager_KeyUp(object sender, KeyEventArgs e) 
     { 
      label1.Text = e.KeyData.ToString() + " Released"; 
     } 

     private void HookManager_MouseUp(object sender, MouseEventArgs e) 
     { 
      label1.Text = e.Button.ToString() + " Released"; 
     } 


     private void HookManager_MouseDown(object sender, MouseEventArgs e) 
     { 
      label1.Text = e.Button.ToString() + " Pressed"; 
     } 

    } 
} 
+1

。NET 4特定問題已在[此問題](http://stackoverflow.com/q/3671673/17034)中介紹。您可能不會重新報告OP的問題,因爲您擁有較新的Windows版本。 –