日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

截取鼠标指针的图片

發布時間:2024/8/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 截取鼠标指针的图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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;

?顯然第一種方法要優于第二種方法。獲得鼠標句柄后的繪制就簡單了,繪制后的分析屬于圖片分析技術這里就不討論了。我做的示范程序如下:

例程下載:/Files/rogee/截取鼠標指針的圖片.zip

轉載于:https://www.cnblogs.com/rogee/archive/2010/09/16/1827782.html

總結

以上是生活随笔為你收集整理的截取鼠标指针的图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。