问女扮男装的小说
女扮男装的小说
-
啊的江湖骗子
钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。钩子的种类很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时钩子函数可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。这有点类似与mfc中的pretranslate**函数,所不同的是该函数只能用于拦截本进程中的消息,而对系统消息则无能为力。二、win32系统钩子的实现
每种类型的钩子均由系统来维护一个钩子链,最近安装的钩子位于链的开始,拥有最高的优先级,而最先安装的钩子则处在链的末尾。要实现win32的系统钩子,首先要调用sdk中的api函数setwindowshookex来安装这个钩子函数,其原型是:
hhook setwindowshookex(int idhook,
hookproc lpfn,
hinstance hmod,
dword dwthreadid);其中,第一个参数是钩子的类型,常用的有wh_mouse、wh_keyboard、wh_get**等;第二个参数是钩子函数的地址,当钩子钩到任何消息后便调用这个函数;第三个参数是钩子函数所在模块的句柄;第四个参数是钩子相关函数的id用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息此时为全局钩子。如果指定确定的线程,即为线程专用钩子。全局钩子函数必须包含在dll(动态链接库)中,而线程专用钩子则可包含在可执行文件中。得到控制权的钩子函数在处理完消息后,可以调用另外一个sdk中的api函数callnexthookex来继续传递该消息。也可以通过直接返回true来丢弃该消息,阻止该消息的传递。使用全局钩子函数时需要以dll为载体,vc6中有三种形式的mfc dll可供选择,即regular statically linked to mfc dll(标准静态链接mfc dll)、regular using the shared mfc dll(标准动态链接mfc dll)以及extension mfc dll(扩展mfc dll)。第一种dll在编译时把使用的mfc代码链接到dll中,执行程序时不需要其他mfc动态链接类库的支持,但体积较大;第二种dll在运行时动态链接到mfc类库,因而体积较小,但却依赖于mfc动态链接类库的支持;这两种dll均可被mfc程序和win32程序使用。第三种dll的也是动态连接,但做为mfc类库的扩展,只能被mfc程序使用。三、win32 dll
win32 dll的入口和出口函数都是dllmain这同win16 dll是有区别的。只要有进程或线程载入和卸载dll时,都会调用该函数,其原型是:
bool winapi dllmain(hinstance hinstdll,dword fdwreason,lpvoid lpvreserved);其中,第一个参数表示dll的实例句柄;第三个参数系统保留;第二个参数指明了当前调用该动态连接库的状态,它有四个可能的值:dll_process_attach(进程载入)、dll_thread_attach(线程载入)、dll_thread_detach(线程卸载)、dll_process_detach(进程卸载)。在dllmain函数中可以通过对传递进来的这个参数的值进行判别,根据不同的参数值对dll进行必要的初始化或清理工作。由于在win32环境下,所有进程的空间都是相互独立的,这减少了应用程序间的相互影响,但大大增加了编程的难度。当进程在动态加载dll时,系统自动把dll地址映射到该进程的私有空间,而且也复制该dll的全局数据的一份拷贝到该进程空间,每个进程所拥有的相同的dll的全局数据其值却并不一定是相同的。当dll内存被映射到进程空间中,每个进程都有自己的全局内存拷贝,加载dll的每一个新的进程都重新初始化这一内存区域,也就是说进程不能再共享dll。因此,在win32环境下要想在多个进程**享数据,就必须进行必要的设置。一种方法便是把这些需要共享的数据单独分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,建立一个内存共享的dll。四、全局共享数据的实现
可以用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:
pragma data_seg("shareddata")
hwnd sharedwnd=**;共享数据
pragma data_seg()
所有在data_seg pragmas语句之间声明的变量都将在shareddata段中。仅定义一个数据段还不能达到共享数据的目的,还要告诉编译器该段的属性,有两种方法可以实现该目的(其效果是相同的),一种方法是在.def文件中加入如下语句:
setctions
shareddata read write shared
另一种方法是在项目设置链接选项中加入如下语句:
section:shareddata,rws
五、鼠标钩子程序示例
本示例程序用到全局钩子函数,程序分两部分:可执行程序mousedemo和动态连接库mousehook。首先编制mfc扩展动态连接库mousehook.dll:
(一)选择mfc appwizard(dll)创建项目mousehook;(二)选择mfc extension dll(mfc扩展dll)类型;(三)通过project菜单的addtoproject子菜单的"new…"添加头文件mousehook.h。(四)在头文件中建立钩子类:
class afx_ext_class cmousehook:public cobject
{
public:
cmousehook();钩子类的构造函数
cmousehook();钩子类的析构函数
bool starthook(hwnd hwnd);安装钩子函数
bool stophook();卸载钩子函数
};(五)在mousehook.cpp文件中加入#include"mousehook.h"语句;(六)加入全局共享数据变量:
pragma data_seg("mydata")
hwnd glhprevtarwnd=**;上次鼠标所指的窗口句柄
hwnd glhd**playwnd=**;显示目标窗口标题编辑框的句柄
hhook glhhook=**;安装的鼠标勾子句柄
hinstance glhinstance=**;dll实例句柄
pragma data_seg()
(七)在def文件中定义段属性:
sections
mydata read write shared
(八)在主文件mousehook.cpp的dllmain函数中加入保存dll实例句柄的语句:
extern"c"int apientry
dllmain(hinstance hinstance,dword dwreason,lpvoid lpreserved)
{
unreferenced_parameter(lpreserved);if(dwreason=dll_process_attach)
{
if!afxinitextensionmodule(mousehookdll,hinstance))
return 0;new cdynlinklibrary(mousehookdll);glhinstance=hinstance;插入保存dll实例句柄
}
else if(dwreason=dll_process_detach)
{
afxtermextensionmodule(mousehookdll);}
return 1;ok
}
这个函数最重要的部分是调用afxinitextensionmodule(),它初始化dll使它在mfc框架中正确的工作。它需要传递给dllmain()的dll实例句柄和afx_extension_module结构,结构中存在着对mfc有用的信息。(九)类cmousehook的成员函数的具体实现:
cmousehook:cmousehook()/类构造函数
{
}
cmousehook:~cmousehook()/类析构函数
{
stophook();}
bool cmousehook:starthook(hwnd hwnd)/安装钩子并设定接收显示窗口句柄
{
bool bresult=false;glhhook=setwindowshookex(wh_mouse,mouseproc,glhinstance,0);if(glhhook!**)
bresult=true;glhd**playwnd=hwnd;设置显示目标窗口标题编辑框的句柄
return bresult;}
bool cmousehook:stophook()/卸载钩子
{
bool bresult=false;if(glhhook)
{
bresult=unhookwindowshookex(glhhook);if(bresult)
{
glhprevtarwnd=**;glhd**playwnd=**;清变量
glhhook=**;}
}
return bresult;}
(十)钩子函数的实现
lresult winapi mouseproc(int ncode,wparam wparam,lparam lparam)
{
lpmousehookstruct pmousehook=(mousehookstruct far*)lparam;if(ncode>=0)
{
hwnd glhtargetwnd=pmousehook->hwnd;取目标窗口句柄
hwnd parentwnd=glhtargetwnd;while(parentwnd!**)
{
glhtargetwnd=parentwnd;parentwnd=getparent(glhtargetwnd);取应用程序主窗口句柄
}
if(glhtargetwnd!glhprevtarwnd)
{
char szcaption[100];getwindowtext(glhtargetwnd,szcaption,100);取目标窗口标题
if(**window(glhd**playwnd))
send**(glhd**playwnd,wm_settext,0,(lparam)(lpctstr)szcaption);glhprevtarwnd=glhtargetwnd;保存目标窗口
}
}
return callnexthookex(glhhook,ncode,wparam,lparam);继续传递消息
}
编译完成便可得到运行时所需的鼠标钩子的动态连接库mousehook.dll和链接时用到的mousehook.lib。六、集成
下面新建一调用鼠标钩子动态连接库的钩子可执行程序:
(一)用mfc的appwizard(exe)创建项目mousedemo;(二)选择"基于对话应用",其余几步均为确省;(三)在对话框上加入一个编辑框idc_edit1;(四)在mousedemo.h中加入对mousehook.h的包含语句:#include"mousehook.h;(五)在cmousedemodlg.h的cmousedemodlg类定义中添加私有数据成员:cmousehook m_hook;(六)在oninitdialog函数的"todo注释"后添加:
cwnd*pwnd=getdlgitem(idc_edit1);取得编辑框的类指针
m_hook.starthook(pwnd->getsafehwnd());取得编辑框的窗口句柄并安装钩子
(七)链接dll库,即把mousehook.lib加入到项目设置链接标签中;(八)把mousehook.h和mousehook.lib复制到mousedemo工程目录中,mousehook.dll复制到debug目录下。编译执行程序即可。当鼠标滑过窗口时便会在编辑框中将此窗口的标题显示出来。结论:
系统钩子具有相当强大的功能,通过这种技术可以对几乎所有的windows
系统消息进行拦截、监视、处理。这种技术可以广泛应用于各种软件,尤其是需要
有监控、自动记录等对系统进行监测功能的软件。本程序只对鼠标消息进行拦截,
相应的也可以在win32环境下对键盘、端口等应用此技术完成特定的功能。
-
问 女配攻略男主的快穿小说
提问时间:2024-05-07 05:38:32
答 快穿之花式男神逆袭方案全能女配【快穿】【快穿】寻找男主女配攻心计【快穿】女配归来【快穿】女配逆袭计划快穿之表妹攻略【快穿】**游戏
-
问 有没有女扮男装的撩妹小说,如女帝直播攻略,位面直播中,荣誉老王,作为男神她也很绝望啊之类的
提问时间:2024-05-07 17:17:38
答 另类影后不错,是女主特别撩妹的,还有不一样的影后也是,不过男主有点厌。还有其他的忘了,我也很喜欢这种的,荣誉老王超好看!不过好像坑了。
-
问 找变身小说(男变女) 完结的
提问时间:2024-05-07 19:23:34
答 展开全部《错体人生》《交换》《换缘》《男校雌孔雀》《爱的诅咒》《夜明珠》《变身记》《变身了》《再生少女》《后悔》《逆流而下》《想不到名字的故事》《变身宿舍》《星...
-
问 描写古代女子女扮男装的句子
提问时间:2024-05-07 16:38:48
答 只见远处行来一翩翩公子,分明是青衫折扇,可却步履轻盈,体态婀娜,体带馨香,吐气如兰。就连女子都自愧不如。以下是别人作品中的鬓珠作衬,乃具双目如星复作月,脂窗粉塌...
-
问 求几部好看的穿越小说,要女主女扮男装的比较淡薄的那种。呵呵 大家帮个忙推荐些吧...
提问时间:2024-05-07 01:12:55
答 1《千年泪》作者:金面佛女主:司嘉洛男主:楚天裔女主很强,男主原来就有几个老婆,但是对女主慢慢不同,我觉得这种理智中成长到不可分割的感情是比较容易让人认可的,封...
-
问 跪求女扮男装的小说 要求: 要现代或者校园的,女主强大,女扮男装能骗过所有人 ,不要穿越和古代的
提问时间:2024-05-07 14:48:08
答 展开全部《盛宠,本少好低调》羽西西的,现代,宠文,女强,男更强。女主男扮女装超帅,是天王巨星。不过连载中。
-
问 求古风小说,女扮男装,不小白,江湖朝堂均可。(满意追加悬赏。)
提问时间:2024-05-07 05:52:38
答 女扮男装看过最感动的就是《火云舞天》特别感动,伪bl,伪兄弟。其他的忽然想不起来了。
-
问 求玄幻女主小说。1v1。感情线多。类似逆天神妃至上。升级不要太快的。最好前期女扮男装
提问时间:2024-05-07 00:15:27
答 目前连载的名作:完美世界,武极天下,武炼巅峰,儒道至圣,永夜君王,雪鹰领主…(有些差不多快完结。完结名作:斗破苍穹,斗罗**,盘龙,吞噬星空,将夜,诛仙,遮天,...