码迷,mamicode.com
首页 > Windows程序 > 详细

用API函数抓取屏幕图像

时间:2014-10-21 00:49:27      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:des   color   io   os   ar   sp   div   on   cti   

procedure screenshot(shot: string);
var
    dibH : hBitmap;
    bits : pointer;
    info : TBITMAPINFO;
    width,height : integer;
    screenDC,dibDC : hDC;
    f : file of byte;
    FileHeader : TBITMAPFILEHEADER;
 
begin
    screenDC := getDC(getDeskTopWindow);
    dibDC := createCompatibleDC(screenDC);
    width := getDeviceCaps(screenDC,HORZRES);
    height := getDeviceCaps(screenDC,VERTRES);
    info.bmiHeader.biXPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSX)*39.37);
    info.bmiHeader.biYPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSY)*39.37);
    zeromemory(@info,sizeOf(info));
    with info.bmiHeader do
    begin
         biSize := sizeOf(TBITMAPINFOHEADER);
         biWidth := width;
         biheight := height;
         biplanes := 1;
         biBitCount := 24;
         biCompression := BI_RGB;
    end;
    dibH := createDIBSection(dibDC,info,DIB_RGB_COLORS,bits,0,0);
    selectObject(dibDC,dibH);
    bitblt(
           dibDC,
           0,0,width,height,
           screenDC,
           0,0,
           SRCCOPY);
    releaseDC(getDeskTopWindow,screenDC);
    assignFile(f,shot);
    reWrite(f);
    if width and 3 <> 0 then
       width := 4*((width div 4)+1);
    with fileHeader do
    begin
         bfType := ord(‘B‘)+(ord(‘M‘)shl 8);
         bfSize := sizeOf(TBITMAPFILEHEADER)+sizeOf(TBITMAPINFOHEADER)+width*height*3;
         bfOffBits := sizeOf(TBITMAPINFOHEADER);
    end;
    blockWrite(f,fileHeader,sizeOf(TBITMAPFILEHEADER));
    blockWrite(f,info.bmiHeader,sizeOf(TBITMAPINFOHEADER));
    blockWrite(f,bits^,width*height*3);
    closeFile(f);
    deleteObject(dibH);
    deleteDC(dibDC);
end;

用API函数抓取屏幕图像

标签:des   color   io   os   ar   sp   div   on   cti   

原文地址:http://www.cnblogs.com/kaibosoft/p/4039213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!