在上面的钩子函数所在的DLL文件中,需要使用共享内存,即,所有击键的记录存储在同一个数据段中。为什么要这样做呢?这是因为Windows95的DLL调用方法与Windows3.X的方法不同。每个进(线)程在登录某动态连接库时都会为该动态连接库传入一个新的实例句柄(即DLL数据段的句柄)。这使得DLL各个实例之间互不干扰,但是这对那些所有DLL实例共享一组变量带来一些困难。为了解决这个问题,我们在这儿通过建立内存映射文件的方法来解决。即使用Windows的OpenFileMapping、CreateFileMapping和
MapViewOfFile三个函数来实现。使用方法如下:
…
MemFile是THandle类型,Shared是指针类型,HOOK_MEM_FILENAME是一常量串
…
MemFile:=OpenFileMapping(FILE_MAP_WRITE,False,
HOOK_MEM_FILENAME); //打开内存映射文件
if MemFile=0 then //打开失败则衉c2建内存映射文件
MemFile:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,
SizeOf(TShared) ,HOOK_MEM_FILENAME);
//映射文件到变量
Shared:=MapViewOfFile(MemFile,File_MAP_WRITE,0,0,0);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。