程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 整蠱QQ截圖

整蠱QQ截圖

編輯:關於VC++

昨天看到有一個朋友自己實現了類似QQ截圖的功能,於是把QQ截圖的 DLL 翻出來,簡單測試了一下,發現一些不常見的小功能也許對大家有用。這裡使用 RTX(騰訊的另一個軟件產品) 中自帶的 camerawnd.dll, 和QQ的很相似。

第一步:用 vc 自帶的 DEPENDS.EXE 察看 DLL 的導出函數,有以下三個

CameraSubArea,CameraWndArea,CameraScreen

從字面意思看,第一個是截取子范圍的,第二個是截取窗口范圍的,第三個是截屏的現在還不知道函數參數,寫個測試程序先,函數暫時認為無返回值 無參數代碼如下:

typedef void (*FUN)();
  HMODULE hInst = LoadLibrary(_T("CameraWnd.dll"));
  if (hInst != NULL)
  {
    FUN pFunc = (FUN)GetProcAddress(hInst, "CameraSubArea");
    if (pFunc != NULL)
    {
      pFunc();
    }
  }

結果測試通過,同樣的代碼換成 GetProcAddress(hModule, "CameraWndArea") 也能成立,並且出現窗口截圖模式,估計還沒有人見過, ^_^當換成 GetProcAddress(hModule, "CameraScreen")可以運行,函數返回的時候會出現異常,說明這個函數是有參數的或者我們的調用方式不對。

第二步:vc調試模式,跟蹤 CameraSubArea 方法可以看到:10001200 push 40800000h
10001205 push 1
10001207 push 1
10001209 call 100010E0

跟蹤 CameraWndArea 方法可以看到:

10001210 push 40800000h
10001215 push 0
10001217 push 2
10001219 call 100010E0

跟蹤 CameraScreen 方法可以看到:

100010E0 push ebp
100010E1 mov ebp,esp
100010E3 push 0FFh
100010E5 push 10007973h

看來前兩個函數都是調用第三個方法實現的,只不過輸入參數不同,< CameraScreen 應該有3個參數,暫時認為是 int,int,int那麼第一、第二個函數應該是使用如下方法調用第三個函數的,

void CameraSubArea()
{
  CameraScreen(1, 1, 0x40800000);
}
void CameraWndArea()
{
  CameraScreen(2, 0, 0x40800000);
}

隨後我又嘗試修改每一個參數,除了最後一個參數不知道作用外,第一個應該是控制模式的,第二個參數控制是否顯示放大鏡是個bool類型第三個參數修改後會影響放大鏡中顯示的內容,估計是放大鏡的參數。有興趣大家可以嘗試一下或者直接使用附帶源代碼測試運行結果。

另:CameraScreen 應該是有返回值的,如果沒有返回值調用者怎麼知道用戶截圖是取消了還是截取了,不會自己去檢查剪貼板吧。之前有人出現截圖功能無法使用的問題,可能是某個其它程序打開剪貼板後沒有關閉,導致程序打開剪貼板失敗,這時候系統的截圖鍵應該也不能用。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved