此文部分知識點相關文章:
此文在使用 MouseHook的基礎上加了一個鼠標點擊程序 獲取截圖的功能,所有要先看看上面的兩篇文章比較好 . . .
話不多說先來看一下程序的效果如何:
運行程序,點擊 Vs 自動獲取截圖,並在畫圖軟件中顯示出來,也可以到當前目錄中查看圖片 . . .
.
要想寫出截圖的代碼,我們需要學習九個 Win32 Api
,他們分別是:
其中有兩兩Api 是對應的,比如獲取句柄 對應 釋放句柄,所以我們還是比較容易理解這九個 Api 的使用 . . .
.
Win32 Api 的描述與功能
1. PrintWindow: 2. SelectObject: 3. CreateCompatibleDC: 4. DeleteDC:5. CreateCompatibleBitmap: 6. DeleteObject: 7. GetWindowRect: 8. GetWindowDC: 9. ReleaseDC:
程序實現
-
首先,我們一個名爲
CaptrueImage
的類,他有一個方法用於返回截取的 Bitmap(位圖)
:
-
在這個類中 導入 Win32 Api:
.
. 實現 Captuer 方法,返回位圖:
- 判斷是否有進程存在,沒有則返回方法:
if (process == null) return null;
-
獲取設備上下文:
-
獲取指定窗口邊界的尺寸:GetWindowRect
-
計算窗口大小:
-
創建一個設備上下文相關的位圖,CreateCompatibleBitmap -> DeleteObject
-
創建一個內存上下文兼容的句柄,CreateCompatibleDC -> DeleteDC
-
選擇一個設備上下文對象:SelectObject
-
拷貝窗口到設備上下文,PrintWindow
-
從位圖句柄中創建 Bitmap:
-
清理垃圾,並返回位圖:
.
. 修改鼠標鉤子左鍵按下操作:
上面好像少了什麼東西,多了一個事件觸發語句,這相當於什麼呢?
相當於下面這個東西:
只不過對 MouseHook 修整了一下而已 . . .
如果我們不想截取一整個進程的圖片,只想截取部分圖片怎麼辦呢?
我們只需要藉助 Graphics 類來實現即可:
例如下的操作:
先定義一個 Bitmap對象,用於存取截的圖,定義 Graphics對象 關聯到 Bitmap對象,使用 DrawImage開始指定大小截圖,最後保存即可,效果如下所示:
如果我們在加一點算法,就可以獲取各種各樣進程中的指定圖片了,是不是很有趣呢?
.
程序完事源碼可訪問: