应用程序功能拦截目前有两种方式,拦截消息和拦截api,鉴于消息更底层和通用,可以避开api
拦截的函数调用不确定性,以免遗漏。我确定采用消息拦截,在回调函数中实现功能。
查了windows的消息机制得资料,基本都在采用微软提供的win api 函数setwindowshookex().
它提供了WM_MOUSE,WM_KEBOARD,WM_CBT,WM_GETMESSAGE,.....大概七类消息的拦截,
翻遍了codeproject和csdn的代码库,基本只有鼠标,键盘这两类得demo,基本没有其他类型的
拦截demo,键盘,鼠标消息传递与组织相对比较简单,我想这也是demo较多得原因。
可见:demo1:Global System Hooks in .NET by Michael Kennedy , http://www.codeproject.com/Articles/6362/Global-System-Hooks-in-NET
但是其他类型的拦截,如保存操作,就找不到相关demo了
(我用spy++看了下,记事本的保存,会产生一个固定ID的WM_MENUSELECT,不管是来自键盘0,和来自鼠标选择1菜单)
这个应该是最接近的了,全局钩子好像要把回调函数用dll实现。
地址:DEMO2:Using Window Messages to Implement Global System Hooks in C# http://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H