博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
截取鼠标指针的图片
阅读量:7025 次
发布时间:2019-06-28

本文共 1104 字,大约阅读时间需要 3 分钟。

Windows下的鼠标经常会显示出不同的样子以提示当前的操作,所以对于很多程序来说截取鼠标指针当前的图片并进行分析是很有用处的,下面分析两种截取鼠标指针的图片的方法并给出一个示范程序。

截取鼠标指针的图片首先要取得鼠标的句柄,然后用API函数DrawIconEx将其绘制在画布上,注意在Windows下鼠标指针(Cursor)和图标(Icon)是没有区别的,利用DrawIconEx的第七个参数istepIfAniCur可以将动态光标的不同帧绘制在画布上,具体的应用可以查看MSDN。

取得鼠标的句柄的第一种方法是利用API函数GetCursorInfo,很奇怪在MSDN6.0中查不到这个函数, 无论鼠标是否停留在本进程的窗口上,利用这个函数都可以取得鼠标的信息,示范代码如下:

//
方案1
function
 Fun1: HCURSOR;
var
    hCur : TCursorInfo;
begin
    ZeroMemory(@hCur,sizeof(hCur));
    hCur.cbSize:
=
SizeOf(hCur);
    GetCursorInfo(hCur);
    result:
=
hCur.hCursor;
end
;

 取得鼠标的句柄的第二种方法是利用API函数GetCursor,一般情况下,只有当鼠标停留在本进程的窗口上,这个函数才返回正确的鼠标句柄,否则只返回默认的鼠标句柄,也就是小箭的样子,不过可以利用API函数AttachThreadInput将两个进程进行输入绑定,这样当鼠标停留在其它进程的窗口上,就或以返回正确的鼠标句柄,示范代码如下:

//
方案2
function
 Fun2: HCURSOR;
var
    wid : HWND;
    tid : DWORD;
begin
    wid:
=
GetForegroundWindow; 
//
获取最前面的窗口
    tid:
=
GetWindowThreadProcessId(wid,
nil
); 
//
获取窗口所在的进程
    AttachThreadInput(GetCurrentThreadId,tid,true);
    result:
=
GetCursor;
    AttachThreadInput(GetCurrentThreadId,tid,false);
end
;

 显然第一种方法要优于第二种方法。获得鼠标句柄后的绘制就简单了,绘制后的分析属于图片分析技术这里就不讨论了。我做的示范程序如下:

例程下载:

转载于:https://www.cnblogs.com/rogee/archive/2010/09/16/1827782.html

你可能感兴趣的文章
flutter 自定义带水波纹和点击态的cell
查看>>
小程序 | 注释级微信小程序demo,助你快速切入开发
查看>>
VS Code markdown格式化的插件编写(3)[解难反思]
查看>>
webpack
查看>>
Django框架环境搭建
查看>>
forth day——杂记
查看>>
你应该知道的前端--跨域(未完待续)
查看>>
iOS 初中级工程师简历指北
查看>>
什么是package-info.java
查看>>
聊聊a.x = (a = {n: 2})
查看>>
来一发算法
查看>>
[译] 通过一些例子深入了解 JavaScript 的 Async 和 Await
查看>>
Python学习教程_Python学习路线:Python3—数据指纹MD5校验对比
查看>>
瘦身UITableViewController
查看>>
Cookie和Session
查看>>
高性能缓存服务器 nuster v1.8.8.1 发布,支持 HTTP/2,多线程
查看>>
[译] 用 Flutter 开发你的第一个应用程序
查看>>
iOS学习笔记30 系统服务(三)蓝牙
查看>>
(三十二)spring cloud微服务架构b2b2c电子商务-Consul 介绍
查看>>
函数式编程学习之路:Mit-Scheme 在 Ubuntu16.04 下的环境配置
查看>>