我想了解C ++中的事件挂钩。 我知道事件是什么,我已经在Java,C#和Javascript中使用了很多。
我遇到的麻烦是find文档,和像全局钩子,DLL注入,没有DLL全局钩子教程。
假设我想通过FireFox中的浏览器标签遍历..我需要希望FireFox有一个C ++的API? 或者让我说我想在用户打开一个新标签时做些什么,我是否需要使用FireFox将在其API中提供的钩子?
以上只是一个例子,所以人们知道我在学习/理解什么。 我在想什么呢?
如何改变使用C#窗口颜色scheme?
从主function最大化窗口?
在Java中获取我的文档path
在Windows 7中安装Memcache(XAMPP)
如何正确注册用于较低filter磁盘驱动程序的内部设备控制请求的完成例程?
我在一个论坛上看到一个post,在过去的两个小时里,我对此感兴趣。 我总是说,一个棘手的挑战,或一个新的challange,使一个更强大的程序员。
任何资源,或任何帮助,将非常感激。
在Windows中Erlang和YAWS设置
我可以在哪里放置文件,使其可以由非pipe理员编辑并由所有用户访问?
计划特定date的Windows服务
收集桌面应用程序的使用情况数据
C ++本身没有事件或钩子,但很多C ++库和框架都实现了它们。 有关通用事件库的示例,请参阅Boost.Signals 。
其中一些实现允许其他应用程序看到它们的事件,但API是特定于应用程序的(例如Firefox,请参阅xpcOM )。
Windows有一个钩子机制,允许监视窗口系统中的各种事件。 但是,这是一个操作系统功能,与C ++无关。 由于这是一个系统机制,所有的Windows应用程序都会受到影响,即使它们没有做任何事情。 Windows钩子的文档可以在这里找到。 此外,由于您提到了“没有DLL的全局钩子”,请参阅SetWinEventHook ,它是比上面链接的Windows钩子更高级别的API,可用于在DLL或EXE中实现的钩子函数。
查找MSDN的SetwindowsHookEx。 它应该是你在Windows钩子入口。 如果您为系统设置了一个parituclar窗口,那么SetwindowLongPtr就是一个不那么干扰的选项。 对于第一个API,您将需要一些Dll注入 – 系统会自动为您进行注入。 只需按照以下步骤操作
创建一个导出HOOKPROC函数的Dll(实际类型取决于钩子tpe – 在文档中读取)
在您的应用程序中加载该Dll,并检索指向HOOKPROC函数的指针。 LoadLibrary / GetProcAddress API可用于此目的。
在你的应用程序中,调用SetwindowsHookEx提供适当的参数 – 这会将dll注入到目标进程中。 所以,这个DLL现在被加载到你的应用程序的进程和目标进程中。 所以你需要一个IPC机制来处理两个进程之间的可能。 这里有很多的方法 – 套接字,管道,DLL中的共享段,文件系统,windows消息,COM服务器+事件等等
以前的API虽然功能较弱,但不需要DLL注入。
选择明智和好运!
我不认为火狐将有一个C + + aPI来找到打开的标签….如果你想找出打开的标签或每当一个新的标签打开,你可以基本上挂钩的Firefox窗口,并获得在该窗口上发生的所有事件到你的钩子程序。
如果你在VC ++中打开spy ++并跟踪firefox窗口,每当打开一个新标签页时,你都会看到新的MozillaContentwindowClass被创建。 所以,你可以基本上遍历窗口句柄,并获得有关打开标签的信息。
您可以使用SetwindowLongPtr来设置该窗口的子类过程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。