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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

QQ抓图功能的提取(dll使用示例)

發布時間:2024/4/24 综合教程 51 生活家
生活随笔 收集整理的這篇文章主要介紹了 QQ抓图功能的提取(dll使用示例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QQ抓圖功能的提取
sjdev


一直以來,我都覺得QQ的抓圖功能做的非常好。特別是在我寫文檔時,一次又一次的“Print Screen”,一次又一次的“mspaint”讓我不勝其煩,“Ctrl+Alt+A”(騰訊QQ抓圖快捷鍵)給了我不小的幫助。有時我想,能不能把QQ的抓圖功能提取出來?這樣的話,不用登陸QQ也可以使用其抓圖功能,這樣會大大方便那些不能上網的人。網上一搜,果然“有法可依”。
QQ2006的安裝目錄下,有一個名叫CameraDll.dll的動態庫,它有一個導出函數CameraSubArea,QQ的抓圖功能就是由這個函數實現的。我們可以這么使用這個函數:
打開一個文本文件,輸入:rundll32.exe CameraDll.dll CameraSubArea, 將它保存為一個.bat文件,然后把它和CameraDll.dll放到同一個目錄,運行這個批處理就可以使用抓圖功能了。
然而我們發現,這樣來使用其抓圖功能有點麻煩,因為每次都要點擊那個批處理文件,那有沒有簡單的辦法呢?辦法是有的,那就是給這個批處理文件創建一個快捷方式,然后給這個快捷方式指定一個快捷鍵,這樣一來,每次點擊相應的快捷鍵時,就可以進行抓圖操作了。
我們可以看到,上面的方案,需要用到三個文件才能解決問題,這樣容易出問題,萬一哪個人不小心把其中一個文件給刪除了,就用不了了。那有沒有辦法只用一個文件搞定所有問題?當然可以,下面要講的就是。
使用VC創建一個程序,把CameraDll.dll當做資源導進去,在需要的時候把它釋放出來,然后調用其中的函數就可以了。代碼本就簡單,此處就不再多費口舌。還有其它一些方便的特性,譬如最小化時拖盤顯示譬如開機自動運行譬如自定義快捷鍵等等,程序中并沒有加入,有興趣的朋友可以自行增加。全部代碼提供下載QQ抓圖功能提取源代碼
注1:下面的代碼已經使用ATL進行完全的重寫,因為已經找不到以前的代碼。另外,程序中使用的抓圖的動態庫,也不是上面所說的QQ2006中的CameraDll.dll而是騰訊TT瀏覽器目錄下的抓圖動態庫CameraDll.dll(也是同樣的名字,而且功能一樣,只是顯示的圖片不一樣)。抓圖動態庫中,同樣還有一個很有用的功能:CameraWindowLikeSpy,感興趣的朋友可以將上面所說的批處理程序中的函數名進行修改,然后運行即可看到效果。
注2:所有版權歸QQ所在公司所有,凡涉及商業利益的,請不要使用。
全部代碼如下:
#include <atlbase.h>
CComModule _Module;
#include <atlwin.h>
#include "resource.h"
#include <stdio.h>

class CPowerSnapDlg:public CDialogImpl<CPowerSnapDlg>
{
public:
enum{IDD=IDD_DLG_POWERSNAP};
BEGIN_MSG_MAP(CPowerSnapDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()

private:
LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
{
// 將主窗口居中顯示
CenterWindow();

TCHAR szTempPath[MAX_PATH];
GetTempPath(MAX_PATH, szTempPath);

TCHAR szTempFile[MAX_PATH] = _T("CameraDll.dll");
strcat(szTempPath, szTempFile);

// 我們將QQ抓圖動態庫Camera.dll作為資源插入了
// 應用程序,此時需要查找到資源,然后才能使用。
HRSRC hRsrc
= ::FindResource(NULL,
MAKEINTRESOURCE(IDR_CAMERADLL),
"Dll");

if (hRsrc == NULL) {
// 查找資源出錯,需要退出程序...
}

// 簡單起見,也可以直接從文件屬性中讀取文件大小
//DWORD len = 90112;
DWORD len = SizeofResource(NULL, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(NULL, hRsrc);
if (lpRsrc == NULL) {
// 加載資源出錯,需要退出程序...
}

// 將資源中的QQ抓圖動態庫釋放到臨時文件
// 此處文件打開模式必須是b(二進制方式),否則會有意想不到的錯誤
FILE* file;
if ((file = fopen(szTempPath, "w+b")) == NULL) {
// 打開文件失敗,需要退出程序...
}

if (fwrite(lpRsrc, sizeof(BYTE), len, file) < len) {
// 寫入文件失敗,需要退出程序...
}
fclose(file);

// 注冊程序啟動快捷鍵
RegisterHotKey(m_hWnd,0,MOD_ALT | MOD_CONTROL,0x41);

strcpy(m_szCommand, szTempPath);
strcat(m_szCommand, _T(" CameraSubArea"));
return 0;
}
LRESULT OnOK(UINT,WPARAM,HWND,BOOL&)
{
ShowWindow(SW_HIDE);
return 0;
}
LRESULT OnCancel(UINT, WPARAM, HWND, BOOL&)
{
EndDialog(IDCANCEL);
return 0;
}
LRESULT OnHotKey(UINT, WPARAM, LPARAM, BOOL&)
{
ShellExecute(NULL, "open", "rundll32.exe", m_szCommand,NULL, NULL);
return 0;
}

private:
TCHAR m_szCommand[MAX_PATH];
};

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
_Module.Init(NULL, hInst);
CPowerSnapDlg psDlg;
psDlg.DoModal();
_Module.Term();
return 0;
}

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sjdev/archive/2007/07/08/1682668.aspx

總結

以上是生活随笔為你收集整理的QQ抓图功能的提取(dll使用示例)的全部內容,希望文章能夠幫你解決所遇到的問題。

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