欢迎来到天天文库
浏览记录
ID:32705308
大小:50.15 KB
页数:5页
时间:2019-02-14
《利用剪贴板实现屏幕截词》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、利用剪贴板实现屏幕截词尽管Windows系统中提供了诸多剪贴板管理功能函数,但这些功能函数一般情况下都是在普通应用程序中使用。对于一些常居顶层的高级中英文软件,要想通过剪贴板实现屏幕截词,在选择要截取的数据后必须通过CTRL+X或CTRL+C功能键将数据复制到剪贴板,然后才能利用GetClipboard和GetClipboardData函数截获屏幕上数据。 我们知道,Windows应用程序中对剪贴板的支持,主要是通过直接处理以下剪贴消息来实现的: WM—COPY将选择的数据拷贝到剪贴板中去(CTR
2、L+C) WM—CUT将选择的数据拷贝到剪贴板,同时删除(CTRL+X) WM—CLEAR清除系统剪贴板中保存的剪贴数据 WM—PASTE将系统剪贴板中的数据复制到窗口当前位置 所有Windows应用程序均支持以上消息处理功能,惟一不同的是一些应用程序中包括多级窗口,处理上述剪贴板消息的窗口有所不同,有些应用程序中可能在父窗口中处理剪贴板消息,而有些应用程序中可能在子窗口中处理剪贴板消息。于是,可以通过遍历应用程序窗口句柄的方法,将WM—COPY消息通过SendMessage或PostMess
3、age函数直接发送给拥有剪贴板消息处理功能的窗口,Windows就会自动将选择的数据复制到系统剪贴板,这时高级应用程序就可以直接截取选择的数据了,从而实现屏幕截词功能。 Windows提供了一系列窗口管理API功能函数,与本文功能有关的函数如下: 1.获取当前具有输入高亮条窗口的句柄HWNDGetFocus() 函数的返回值为当前具有输入高亮条的窗口句柄,如果返回值为NULL则表示当前不存在具有输入高亮条的窗口。 2.获取当前指定窗口父窗口句柄 HWNDGetParent(HWNDhWnd)
4、 其中hWnd为当前窗口句柄,返回值为当前窗口的父窗口句柄,如果返回值为NULL,则表示当前窗口没有父窗口。 3.获取与指定窗口相关窗口的句柄 HWNDGetWindow(HWNDhWnd,UINTfnRel) 该函数用来检索与给定窗口有关的窗口句柄,函数搜索系统的顶层窗口列表,返回与窗口有关的所有子窗口或所有同级窗口的句柄。其中hWnd为标识原始窗口的句柄,fnRel指定返回窗口与原始窗口之间的关系,可以是下列参数值之一: (1)GW—CHILD标识窗口的第一个子窗口 (2)GW—HWN
5、DFIRST返回窗口的第一个兄弟窗口,如果不存在则返回列表中的第一个顶层窗口 (3)GW—HWNDLAST返回窗口的最后一个兄弟窗口,如果不存在则返回列表中的最后一个顶层窗口 (4)GW—HWNDNEXT返回列表中紧跟给定窗口的兄弟窗口 (5)GW—HWNDPREV返回列表中当前窗口的前一个兄弟窗口 (6)GW—OWNER返回当前窗口的拥有者窗口句柄 函数的返回值为取得的窗口句柄,如果返回值为NULL表示fnRel参数无效、系统的窗口列表结束、当前窗口不存在子窗口或拥有者。 利用上述三个函
6、数,就可以遍历整个应用程序窗口,从而实现截取数据的消息WM—COPY的所有发送过程。但有一点需要提醒读者注意的是,如果要保存剪贴板中原来的数据内容,在发送WM—COPY消息前必须将剪贴板中的数据保存,当WM—COPY消息发送结束并正确读取剪贴板中数据之后,再恢复原有数据,使软件功能达到尽善尽美。 至于剪贴板中数据的读取功能,其实现过程并不复杂,主要是一个打开、读取和关闭的过程。有关函数的原形如下: 1.打开剪贴板 HANDLEOpenClipboard(HWNDhWnd) 其中hWnd为打开剪
7、贴板的窗口句柄,返回值为TRUE表示打开成功,否则剪贴板打开失败。 2.取得剪贴板数据控制句柄 HANDLEGetClipboardData(UINTForm) 其中Form为剪贴板数据格式,CF—TEXT为文本数据格式,也可以是图形数据格式或其它定义的数据格式,这里只讨论与本文程序功能相关的文本格式;返回值为剪贴板数据的内存控制句柄,如果为NULL表示地址无效。 3.内存控制句柄加锁 LPvoidGlobalLock(HANDLEHand) 其中Hand为内存控制句柄,其返回值为指向内存
8、控制句柄所在的特定数据格式的指针,LPvoid中的void可根据实际需要来确定,可以是BYTE和WORD等数据格式,上述获取的剪贴板数据内存控制句柄只有在加锁后方能读取内存中的数据。 4.内存控制句柄解锁 voidGlobalUnlock(HANDLEHand) 其中Hand为被加锁的内存控制句柄。内存数据读取结束后必须将其解锁,其它应用程序才能再次操作相同内存数据。 5.关闭系统剪贴板 voidCloseClipboard(void) 剪贴
此文档下载收益归作者所有