using
System;
using
System.Runtime.InteropServices;
namespace
easyHook
{
class
Program
{
[DllImport(
"user32.dll"
)]
static
extern
bool
MessageBeep(
uint
uType);
[UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError =
true
)]
delegate
bool
MessageBeepDelegate(
uint
uType);
static
private
bool
MessageBeepHook(
uint
uType)
{
Console.WriteLine();
Console.WriteLine(
"----我们自定义的MessageBeepHook函数,- -无声MessageBeep----"
);
return
true
;
}
static
void
Main(
string
[] args)
{
IntPtr messageBeep = EasyHook.LocalHook.GetProcAddress(
"user32.dll"
,
"MessageBeep"
);
MessageBeepDelegate messageBeepDelegate =
new
MessageBeepDelegate(MessageBeepHook);
Console.WriteLine(
"1.当程序载入的时候就调用一次MessageBeep函数,这里的MessageBeep还没有被hook"
);
MessageBeep(0xFFFFFFFF);
Console.Write(
"\n按下回车键,将会hook MessageBeep(也就是程序调用MessageBeep时,会替换成我们自定义的MessageBeepHook函数):"
);
Console.ReadLine();
var
hook = EasyHook.LocalHook.Create(messageBeep, messageBeepDelegate,
null
);
hook.ThreadACL.SetInclusiveACL(
new
int
[] { 0 });
MessageBeep(0xFFFFFFFF);
Console.Write(
"\n按下回车键 禁用当前的hook(也就是还原MessageBeep函数,调用的时候就是原本的MessageBeep函数了):"
);
Console.ReadLine();
hook.ThreadACL.SetExclusiveACL(
new
int
[] { 0 });
MessageBeep(0xFFFFFFFF);
Console.Write(
"\n按下回车键 卸载hook并退出"
);
Console.ReadLine();
hook.Dispose();
}
}}