c#갈고리 학습 노트

4155 단어
시스템 갈고리와 라인 갈고리를 포함하거나 전체 갈고리와 개인 갈고리라고 부른다.시스템 갈고리는 단독 DLL이 필요합니다. 이곳은 많은 시간을 지체했습니다. 인터넷상에서 단독 DLL을 사용하지 않아도 된다고 합니다.
지금부터 코드를 붙여보도록 하겠습니다. 코드는 레드 블랙 리그의 한 문장을 참조했습니다.
 
  
public class SetHook
{
public class HookTypes
{
///
///
///

public enum HookType
{
WH_JOURNALRECORD = 0,//
WH_GETMESSAGE = 3,//
WH_JOURNALPLAYBACK = 1,// WH_JOURNALRECORD
WH_CALLWNDPROC = 4,// ,
WH_CBT = 5,// CBT
WH_MSGFILTER = -1,// 、 、 、
WH_SYSMSGFILTER = 6,// , , ,
//8
WH_DEBUG = 9,//
WH_SHELL = 10,//
WH_FOREGROUNDIDLE = 11,// ,
#region
///
///
///

WH_KEYBOARD = 2,
///
/// windows NT ,
///

WH_KEYBOARD_LL = 13,
///
///
///

WH_MOUSE = 7,
///
/// windows NT ,
///

WH_MOUSE_LL = 14,
#endregion
}
}
public abstract class Hooks : HookTypes
{
public delegate int HookProc(int nCode, int wParam, IntPtr IParam);
///
///
///

///
///
/// 。 lpfn DLL
/// ID , 0, ,
/// , NULL
[DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(HookType hooktype, HookProc lpfn, IntPtr hInstance, int threadId);
///
///
///

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

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

///
[DllImport("kernel32")]
public static extern int GetCurrentThreadId();
#region
///
///
///

public HookProc proc;
public abstract int SetWindowsHookEx();
#endregion
}
public class AddHook : Hooks
{
HookType hooktyp;
HookProc hookproc;
public AddHook(HookType _hooktype, HookProc _hookproc)
{
this.hooktyp = _hooktype;
this.hookproc = _hookproc;
}
public int AddPrivateHook()
{
return SetWindowsHookEx();
}
///
///
///

///
public override int SetWindowsHookEx()
{
//int theadId = System.Threading.Thread.CurrentThread.ManagedThreadId(); GetCurrentThreadId()
int hookId = 0;
object hookId_ = SetWindowsHookEx(this.hooktyp, this.hookproc, IntPtr.Zero, GetCurrentThreadId());
if (hookId_ != null)
{
hookId = (int)hookId_;
}
return hookId;
}
    // ,
}
}

내가 새로 만든 클래스를 호출하면 라인이나 시스템 갈고리를 호출하기 쉬우니 여기에는 붙이지 않겠다

좋은 웹페이지 즐겨찾기