易语言怎么hook关机命令?

易语言怎么hook关机命令?,第1张

(信息框(“是否关闭计算机”,0,“提示”) 然后判定返回值按下了哪个键 或者要密码的话做个带密码的窗口,载入那个窗口,如果真(编辑框1.内容=“123” 且 编辑框2.内容=“456”) 则执行关闭系统() 求采纳!!

Form里有WndProc方法,对它进行重写,可以捕获系统消息。下面的代码放进你程序里试试。

//截取消息,进行处理

protected override void WndProc(ref Message m)

{

switch(m.Msg)

{

case 17:

MessageBox.Show("哈哈,你不能关闭计算机!")

m.Result=(IntPtr)0

break

case 513:

MessageBox.Show("哈哈,你不能点击左键!")

m.Result=(IntPtr)0

break

case 516:

MessageBox.Show("哈哈,你不能点击右键!")

m.Result=(IntPtr)0

break

default:

base.WndProc(ref m)

break

}

}

以上方法是截获系统关机时发送给各个进程的关机消息,如果这种方法没用的话,可以用windows系统钩子来进行消息获取,一旦设置了系统钩子,它将先于任何消息捕捉机制而第一个捕捉到消息,用到系统钩子必须从系统DLL导入以下方法。

//装置钩子的函数

[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, Int32 wParam, IntPtr lParam)

具体的用法,可以去网上搜索,网上有很多的。英文叫windows hook。

在x64环境下,分为x86进程和x64进程,所以要写两个模块。

临时想到几个方法:

1.遍历进程,远程线程注入模块,模块负责HOOK。

2.全局钩子(SetWindowsHookEx)注入,再HOOK,但不能注入没有窗口的进程。

3.记得WinLogon相关的注册表好像可以自动注入,不知道和谐了没。

4.通过方法1注入现有的进程,再找csrss注入,因为每一个新进程创建的时候都要通知它,具体Hook点记不清了,好像很麻烦。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/9911285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存