| 導購 | 订阅 | 在线投稿
分享
 
 
 

自動截屏到文件的小程序

來源:互聯網網民  2006-12-17 07:31:24  評論

自動截屏到文件的小程序

自動截屏到文件的小程序

(一)功能

實現了一個定時截取當前屏幕圖像的小程序。

(二)准備工作

1)建立VC CONSOLE APPLICATION,選擇MFC SUPPORT

2)在STDAFX.H文件中加入頭文件:conio.h

(三)主程序

主程序代碼如下:

int count = 0;

while(!_kbhit())//用戶按鍵則退出

{

Sleep(5000);//挂起5秒

count ++;

sprintf(Filename, '%d.bmp', count);

Screen(Filename);//調用Screen函數

}

以上代碼每隔5秒鍾調用一次函數Screen,將當前屏幕保存到文件中。

(四)工作函數Screen

Screen實現了當前屏幕內容到bmp文件的拷貝。

源代碼如下:

{

CDC *pDC;//屏幕DC

pDC = CDC::FromHandle(GetDC(NULL));//獲取當前整個屏幕DC

int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//獲得顔色模式

int Width = pDC->GetDeviceCaps(HORZRES);

int Height = pDC->GetDeviceCaps(VERTRES);

cout << '當前屏幕色彩模式爲' << BitPerPixel << '位色彩' << endl

<< '屏幕寬度:' << Width << endl

<< '屏幕高度:' << Height << endl << endl;

CDC memDC;//內存DC

memDC.CreateCompatibleDC(pDC);

CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap

memBitmap.CreateCompatibleBitmap(pDC, Width, Height);

oldmemBitmap = memDC.SelectObject(&memBitmap);//將memBitmap選入內存DC

memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//複制屏幕圖像到內存DC

//以下代碼保存memDC中的位圖到文件

BITMAP bmp;

memBitmap.GetBitmap(&bmp);//獲得位圖信息

FILE *fp = fopen(filename, 'w+b');

BITMAPINFOHEADER bih = {0};//位圖信息頭

bih.biBitCount = bmp.bmBitsPixel;//每個像素字節大小

bih.biCompression = BI_RGB;

bih.biHeight = bmp.bmHeight;//高度

bih.biPlanes = 1;

bih.biSize = sizeof(BITMAPINFOHEADER);

bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//圖像數據大小

bih.biWidth = bmp.bmWidth;//寬度

BITMAPFILEHEADER bfh = {0};//位圖文件頭

bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位圖數據的偏移量

bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件總的大小

bfh.bfType = (WORD)0x4d42;

fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//寫入位圖文件頭

fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//寫入位圖信息頭

byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申請內存保存位圖數據

GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p,

(LPBITMAPINFO) &bih, DIB_RGB_COLORS);//獲取位圖數據

fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//寫入位圖數據

delete [] p;

fclose(fp);

memDC.SelectObject(oldmemBitmap);

}

(五)改進

可以在系統熱鍵中加入自定義熱鍵,進行動態的(按用戶需要的)截屏操作。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
自動截屏到文件的小程序 自動截屏到文件的小程序 (一)功能 實現了一個定時截取當前屏幕圖像的小程序。 (二)准備工作 1)建立VC CONSOLE APPLICATION,選擇MFC SUPPORT 2)在STDAFX.H文件中加入頭文件:conio.h (三)主程序 主程序代碼如下: int count = 0; while(!_kbhit())//用戶按鍵則退出 { Sleep(5000);//挂起5秒 count ++; sprintf(Filename, '%d.bmp', count); Screen(Filename);//調用Screen函數 } 以上代碼每隔5秒鍾調用一次函數Screen,將當前屏幕保存到文件中。 (四)工作函數Screen Screen實現了當前屏幕內容到bmp文件的拷貝。 源代碼如下: { CDC *pDC;//屏幕DC pDC = CDC::FromHandle(GetDC(NULL));//獲取當前整個屏幕DC int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//獲得顔色模式 int Width = pDC->GetDeviceCaps(HORZRES); int Height = pDC->GetDeviceCaps(VERTRES); cout << '當前屏幕色彩模式爲' << BitPerPixel << '位色彩' << endl << '屏幕寬度:' << Width << endl << '屏幕高度:' << Height << endl << endl; CDC memDC;//內存DC memDC.CreateCompatibleDC(pDC); CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap memBitmap.CreateCompatibleBitmap(pDC, Width, Height); oldmemBitmap = memDC.SelectObject(&memBitmap);//將memBitmap選入內存DC memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//複制屏幕圖像到內存DC //以下代碼保存memDC中的位圖到文件 BITMAP bmp; memBitmap.GetBitmap(&bmp);//獲得位圖信息 FILE *fp = fopen(filename, 'w+b'); BITMAPINFOHEADER bih = {0};//位圖信息頭 bih.biBitCount = bmp.bmBitsPixel;//每個像素字節大小 bih.biCompression = BI_RGB; bih.biHeight = bmp.bmHeight;//高度 bih.biPlanes = 1; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//圖像數據大小 bih.biWidth = bmp.bmWidth;//寬度 BITMAPFILEHEADER bfh = {0};//位圖文件頭 bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位圖數據的偏移量 bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件總的大小 bfh.bfType = (WORD)0x4d42; fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//寫入位圖文件頭 fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//寫入位圖信息頭 byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申請內存保存位圖數據 GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p, (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//獲取位圖數據 fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//寫入位圖數據 delete [] p; fclose(fp); memDC.SelectObject(oldmemBitmap); } (五)改進 可以在系統熱鍵中加入自定義熱鍵,進行動態的(按用戶需要的)截屏操作。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有