2013-07-04 2 views
0

Я пытаюсь сделать приложение, которое может войти неактивности пользователя через входной крючок, однако я застрял на данный момент, потому что компилятор выдает ошибку о том,Почему мой входной крюк не работает?

an object reference is required for the non-static field, method, or property 'NotifyIcon.InputHook.MouseHookProcedure' 

Это мой пассивность пользовательского код обработчика событий

public void inactivity_Active(object sender, EventArgs e) 
     { 

      if (InputHook.hHook == 0) 
      { 

       InputHook.MouseHookProcedure = new InputHook.HookProc(InputHook.MouseHookProc); 

       InputHook.hHook = InputHook.SetWindowsHookEx(InputHook.WH_MOUSE, 
        InputHook.MouseHookProcedure, 
        (IntPtr)0, 
        AppDomain.GetCurrentThreadId()); 

      } 

и для моего InputHook класса, это настраивает входной крюк

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 




namespace NotifyIcon 
{ 
    public class InputHook 
    { 
     public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam); 

     public static int hHook = 0; 

     public const int WH_MOUSE = 7; 

     public HookProc MouseHookProcedure; 

     [StructLayout(LayoutKind.Sequential)] 
     public class POINT 
     { 
      public int x; 
      public int y; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public class MouseHookStruct 
     { 
      public POINT pt; 
      public int hwnd; 
      public int wHitTestCode; 
      public int dwExtraInfo; 
     } 


     [DllImport("user32.dll", CharSet = CharSet.Auto, 
CallingConvention = CallingConvention.StdCall)] 
     public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, 
     IntPtr hInstance, int threadId); 

     [DllImport("user32.dll", CharSet = CharSet.Auto, 
CallingConvention = CallingConvention.StdCall)] 
     public static extern bool UnhookWindowsHookEx(int idHook); 

     [DllImport("user32.dll", CharSet = CharSet.Auto, 
CallingConvention = CallingConvention.StdCall)] 
     public static extern int CallNextHookEx(int idHook, int nCode, 
     IntPtr wParam, IntPtr lParam); 


     public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) 
     { 
      //Marshall the data from the callback. 
      MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); 

      if (nCode < 0) 
      { 
       return CallNextHookEx(hHook, nCode, wParam, lParam); 
      } 
      else 
      { 
       //Create a string variable that shows the current mouse coordinates. 
       String strCaption = "x = " + 
         MyMouseHookStruct.pt.x.ToString("d") + 
          " y = " + 
       MyMouseHookStruct.pt.y.ToString("d"); 
       return CallNextHookEx(hHook, nCode, wParam, lParam); 


      } 
     } 
    } 
} 

Любое и вся помощь, с этим ISSU е было бы весьма признателен =]

ответ

0

Вам нужно сделать его статическим, потому что это не свойство экземпляра

public static HookProc MouseHookProcedure; 
+0

Устранена, спасибо большое =] –

+0

You приветствую :) – keyboardP

0

Сделать это статическое:

public static HookProc MouseHookProcedure; 
Смежные вопросы