关于C#的Hook技术问题

news/2024/7/5 11:18:18
思路可以这样 在DLL里面 1)用SetProp函数将C#写的一个窗口设置成特别的属性 否则要通过C++写DLL 然后用SendNotifyMessage函数将该信息发送给特定属性的托管窗口 ||| static LRESULT CALLBACK ShellHookCallback(int code "FLAG_WND" 比如: SetProp(GetDesktopWindow() 只有键盘和鼠标可以在托管代码中实现全局钩子 用RegisterWindowMessage函数注册信息 捕捉到相应的Hook code后 lparam);} wparam code lparam); } } return CallNextHookEx(hookShell wparam msg "CUSTM_HOOK_HWND_SHELL"); if (msg = 0) { SendNotifyMessage(dstWnd LPARAM lparam){ if (code >= 0) { UINT msg = 0; if (code == HSHELL_ACTIVATESHELLWINDOW) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_ACTIVATESHELLWINDOW"); else if (code == HSHELL_GETMINRECT) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_GETMINRECT"); else if (code == HSHELL_LANGUAGE) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_LANGUAGE"); else if (code == HSHELL_REDRAW) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_REDRAW"); else if (code == HSHELL_TASKMAN) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_TASKMAN"); else if (code == HSHELL_WINDOWACTIVATED) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_WINDOWACTIVATED"); else if (code == HSHELL_WINDOWCREATED) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_WINDOWCREATED"); else if (code == HSHELL_WINDOWDESTROYED) msg = RegisterWindowMessage("CUSTM_HOOK_HSHELL_WINDOWDESTROYED"); HWND dstWnd = (HWND)GetProp(GetDesktopWindow() WPARAM wparam target); 2)挂上钩子 原因貌似.net的垃圾回收机制

http://www.niftyadmin.cn/n/4557329.html

相关文章

boost库checked_delete的使用

在查看boost库时发现一个小文件checked_delete.hpp里面几个小函数&#xff0c;它的作用用很简短的话来说&#xff1a;防止未定义的行为造成delete时的内存泄露。实现如下&#xff1a; template<class T> inline void checked_delete(T * x) {// intentionally complex - …

The ODBC resource dll is a different version than the ODBC setup dll

不用上面那麽复杂 到系统里面INSFOTE 的文件修改路径 ||| 看来是你的安装程序版本不一致呀 或者你改路径 D:/ 然后重新安装 所以建议你前提就是删除你C盘数据库 你重复安装数据库了 原因只有一个 你直接到C:盘下直接删除原来德数据库2000 建议最好是重装一下安装程序 弄一个高版…

JFrame的简例。JFrame扩展于AWT的Frame类,JFrame是Swing的组件。Swing是AWT的升级版本。

package tz.yt.simpleframe; import java.awt.*; import javax.swing.*; /** Frame的扩展类&#xff0c;JFrame扩展于Frame是Swing组件之一。Swing是Frame的升级版。不依赖于平台底层实现。解释&#xff1a;1.EventQueue.invokeLater//EventQueue事件队列类&#xff0c;不依赖硬…

求下载地址 vista系统用什么c语言的软件才会兼容

答案补充 Borland C Builder V6.0比较大 但是Borland C Builder V6.0可以 没有完全兼容vista系统的VC6.0 目前为止 如果是VC6.0的话 可以兼容 到迅雷的搜狗下载吧 我有 不影响使用 ||| 下载一个vs2008吧 答案补充 哦 我用了 看看行不行 我给你发过去 留个邮箱给我 搜vs2008就会…

在delphi中package是否能够调用其他package中的类呢

老版的delphi不支持命名空间 导入别的DLL就能调用了 package 应该相当于c#中的dll的概念 调用其它的package 而不是名字空间 ||| 可以调用 ||| 这里的package应当是生成dll的吧 现在的支持了 不过很多package是通过安装到delphi中才能用的——例如很多控件库 只要在工程中加入其…

反射-笔记

1.反射的作用&#xff08;3个&#xff09;。 1.1、在运行时分析类的能力。 1.2、运行时查看对象。 1.3、实现通用的数组操作。 2、class类&#xff08;个人认为&#xff1a;正是因为有class类&#xff0c;才诞生了反射。&#xff09; 解释&#xff1a;JAVA运行时始终为对象…

内部类-笔记-2020.08.06

1.内部类的好处&#xff08;作用&#xff09; 1.1、内部类可以访问本类数据&#xff0c;该类定义所在域中的数据&#xff08;外围数据&#xff0c;内部类外一层的数据&#xff09;。包括私有数据。 1.2、内部类同包中对其他类不可见。可以对同一个包中的其他类隐藏起来。 1.3、…

解释一下++号的意思 C语言菜鸟提问

p(i)(i)(i);q(j)(j)(j);像这样的表达式还是不要这样写的好.. ||| i ii1i i1i ||| i 与i 都是把i 原来值加 1 只是i是先运行而后加1 i 是先加1后运行 这是个习惯问题void main()还有 i 表示 i变量自增1后再参与运算i 表示 i变量参与运算后 请你在前面加上#include<conio.h&…