C# 之 鼠標點擊進程 —— 截取圖片

此文部分知識點相關文章:

此文在使用 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:在這裏插入圖片描述


程序實現

  1. 首先,我們一個名爲 CaptrueImage 的類,他有一個方法用於返回截取的 Bitmap(位圖)
    在這裏插入圖片描述

  2. 在這個類中 導入 Win32 Api:
    在這裏插入圖片描述

.

. 實現 Captuer 方法,返回位圖:

  1. 判斷是否有進程存在,沒有則返回方法:
if (process == null) return null;
  1. 獲取設備上下文:
    在這裏插入圖片描述

  2. 獲取指定窗口邊界的尺寸:GetWindowRect
    在這裏插入圖片描述

  3. 計算窗口大小:
    在這裏插入圖片描述

  4. 創建一個設備上下文相關的位圖,CreateCompatibleBitmap -> DeleteObject
    在這裏插入圖片描述

  5. 創建一個內存上下文兼容的句柄,CreateCompatibleDC -> DeleteDC
    在這裏插入圖片描述

  6. 選擇一個設備上下文對象:SelectObject
    在這裏插入圖片描述

  7. 拷貝窗口到設備上下文,PrintWindow
    在這裏插入圖片描述

  8. 從位圖句柄中創建 Bitmap:
    在這裏插入圖片描述

  9. 清理垃圾,並返回位圖:
    在這裏插入圖片描述

.

. 修改鼠標鉤子左鍵按下操作:

在這裏插入圖片描述

上面好像少了什麼東西,多了一個事件觸發語句,這相當於什麼呢?

相當於下面這個東西:

在這裏插入圖片描述

只不過對 MouseHook 修整了一下而已 . . .

如果我們不想截取一整個進程的圖片,只想截取部分圖片怎麼辦呢?

我們只需要藉助 Graphics 類來實現即可:

例如下的操作:

在這裏插入圖片描述

先定義一個 Bitmap對象,用於存取截的圖,定義 Graphics對象 關聯到 Bitmap對象,使用 DrawImage開始指定大小截圖,最後保存即可,效果如下所示:

在這裏插入圖片描述

如果我們在加一點算法,就可以獲取各種各樣進程中的指定圖片了,是不是很有趣呢?

.


程序完事源碼可訪問:

GitHub --> Process-Screenshots

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章