getdlgitem showwindow_enablewindow showwindow_enablewindow f(5)

电脑杂谈  发布时间:2017-01-22 04:03:51  来源:网络整理

{

UnhookWindowsHookEx(oldkeyhook);

}

这个动态连接库的源代码hookdll.cpp包含了键盘处理函数,设置钩子,退出钩子函数。并将键盘敲下的键以值的格式存入到c:\hook\key.txt文件中。以下是对该文件的详细的解释。

使用包含在DLL的函数,必须将其导入。导入操作时通过dllimport来完成的,dllexport和dllimport都是vc(visualC

++)和bc(BorlandC++)所支持的扩展的关键字。但是dllexport和dllimport关键字不能被自身所使用,因此它的前面必须有

另一个扩展关键字__declspec。通用格式如下:__declspec(specifier)其中specifier是存储类标示符。对于DLL,

specifier将是dllexport和dllimport。而且为了简化说明导入和导出函数的语句,用一个宏名来代替__declspec.在此程

序中,使用的是DllExport。如果用户的DLL被编译成一个C++程序,而且希望C程序也能使用它,就需要增加“C”的连接说明。

#defineDllExportextern"C"__declspec(dllexport),这样就避免了标准C++命名损坏。(当然,如果

读者正在编译的是C程序,就不要加入extern“C”,因为不需要它,而且编译器也不接受它)。有了宏定义,现在就可以用一个简单的语句就可以导出函

数了,比如:DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,

LPARAMlParam);DllExportvoidInstallHook(intnCode);

DllExportvoidEndHook(void);

第一个#pragma语句创造数据段,这里命名为hookdata。其实也可以命名为您喜欢的任意的一个名称。#pragma语句之后的所有初始化的

变量都进入hookdata段中。第二个#pragma语句是数据段的结束标志。对变量进行专门的初始化是很重要的,否则编译程序将把它们放在普通的未初

始化的段中而不是放在hookdata中。

但是链接程序必须直到有一个hookdata段。我们可以在ProjectSetting(vc6.0)对话框中选择Link选项,选中

HOOKDLL时在ProjectOptions域(在Release和Debug配置中均可),包含下面的连接语句:/SECTION:

hookdata,RWS字母RWS是表明该段具有读、写、和共享属性。当然,您也可以直接用DLL源代码指定链接程序就像HOOKDLL.c那样:

#pragmacomment(linker,"/SECTION:hookdata,RWS")。

由于有些DLL需要特殊的启动和终止代码。为此,所有的DLL都有一个名为DllMain()的函数,当初始化或终止DLL时调用该函数。一般在动态连结库的资源文件中定义此函数。不过如果没有定义它,则编译器会自动提供缺省的形式。

原型为:BOOLWINAPIDllMain(HINSTANCEhInstance,ULONGWhat,LPVOIDNotUsed)

参数:

hInstance:DLL实例句柄

What:指定所发生的操作

NotUsed:保留参数

其中What的值可以为以下值:

DLL_PROCESS_ATTACH:进程开始使用DLL


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-27965-5.html

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

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