谁能用c语言写一个钩子函数的例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能用c语言写一个钩子函数的例子相关的知识,希望对你有一定的参考价值。

谁能用c语言写一个钩子函数的例子
最好来多点不一样的算法! 谢谢

例子:
HWND hWnd = NULL; //定义成全局变量
HHOOK hKeyboard;
HHOOK hMouse;
LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠标钩子函数

return 1; // 返回非零值表示已经对当前消息进行了处理,这样系统就不会再将这个消息传递给目标窗口过程

LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lparam )
if( VK_F4 == wParam && (1 == (lparam>>29&1)) ) // 系统后门:Alt+F4键退出程序

::SendMessageA( hWnd, WM_CLOSE, 0, 0 );

定义钩子函数
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。下面以鼠标钩子函数举例说明钩子函数的原型:
LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)
参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信息,比如是否从消息队列中移出。 我们先在钩子函数中实现自定义的功能,然后调用函数 CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数。CallNextHookEx.的原型如下:
LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 参数 hhk是钩子句柄。nCode、wParam和lParam 是钩子函数。
当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。
参考技术A //键盘钩子处理函数。
    extern "C" LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
   
    if( nCode >= 0 )
   
    if( wParam == 0X79 )//当按下F10键
 
CPoint newPoint,oldPoint;
   GetCursorPos(&oldPoint);
   newPoint.x = oldPoint.x 40;
   newPoint.y = oldPoint.y 10;
   SetCursorPos(newPoint.x,newPoint.y);
   mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模拟按下鼠标左键。
   mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模拟放开鼠标左键。
   keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0); //按下SHIFT键。
   keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//按下R键。
   keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);//放开R键。
   keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);//放开SHIFT键。
       SetCursorPos(oldPoint.x,oldPoint.y);
 
   
    return CallNextHookEx(glhHook,nCode,wParam,lParam);
   

谁能用m语言或者c语言帮我完成一下

1 创建一个数组(长度根据检测允许的时间定,一般选为50即可),初始化数组为全零
2每个采样时间对数组进行一次处理:将新数据存入数组,数组第一个数据被覆盖,之后的数据前移,最后一个存入当前数据
3 设定一个门限,判断最新的n(n取50/5)个数据是否都超出门限,如果是则说明出现故障,输出为1,否则输出为0

参考技术A 用matlab写一个,LZ试试看:
在程序开始的时候新建一个数列:
data = zeros(1,n);
然后调用一下函数,n是数组长度,data是之前设好的数组名,nu_data是新数据,threshold是阈值。
function [data,return_val] = baidu_help_0409(n,data,nu_data,threshold)
% 1.initial data series at begining
% data = zeros(1,n);
% 2.put nu_data at end of data series
% 3.specify threshold
tmp_data = [data,nu_data];
data = tmp_data(2:n+1);
num = round(n/5);
thres_data = sort(data(n-num+1:n));
if thres_data(1) > threshold
return_val = 1;
else
return_val = 0;
end

以上是关于谁能用c语言写一个钩子函数的例子的主要内容,如果未能解决你的问题,请参考以下文章

用Delphi实现Windows的鼠标钩子函数

第10节:路由中的钩子

钩子函数的执行顺序

Vue源码后记-钩子函数

C# WinForm键盘钩子

钩子函数介绍