LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1824|回复: 5

linux下该如何实现类似windows下钩子程序的功能?

[复制链接]
发表于 2006-2-10 17:11:57 | 显示全部楼层 |阅读模式
如键盘钩子,鼠标钩子
发表于 2006-2-11 00:40:15 | 显示全部楼层
就是回调函数吧!可以用消息队列实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-11 14:42:59 | 显示全部楼层
可以再详细点吗?谢谢
回复 支持 反对

使用道具 举报

发表于 2006-2-13 22:56:07 | 显示全部楼层
这个原理很简单的。你可以在你的程序里创建一个消息队列,然后开几个线程做事情。比如说一个线程专门负责处理键盘响应(主要是数据处理,然后按自己定义的格式把它挂到消息队列里去),一个线程专门负责鼠标响应(这些响应linux下好像有库函数可以处理的,所以获得它们的数据不是很难的。)。而主线程专门进行消息循环,一读到消息队列里有东西立即处理。而处理函数就可以写成你所说的钩子函数啊!比如说像下面一样。int  msg_deal(int  one, int  two, void *three, void * four, int(* proc)()){ proc(one, two, three, four);},然后你就可以写各种各样的消息处理函数当参数传给msg_deal。比如,主线程在消息队列里捕获了一个键盘消息,再比如键盘消息的处理函数为msg_keybord_deal(int one, int two, void *none1, void *none2){},挂在消息队列里的键盘消息的表记为MSG_KEYBORD,那么主线程的消息循环可以这样写switch (msg){case MSG_KEYBORD:
msg_deal(one, two, three, four, msg_keybord_deal); break;};响应另外的消息道理类似!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-15 20:28:29 | 显示全部楼层
谢谢,我去试试先
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-15 20:28:33 | 显示全部楼层
谢谢,我去试试先
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表