根據指定視窗控制代碼進行截圖

2021-06-08 21:07:27 字數 2772 閱讀 8784

1、獲取視窗控制代碼

見2、截圖函式**(包含截圖類和呼叫示例)

screen.h標頭檔案如下:

#ifndef __cscreen_h__

#define __cscreen_h__

#include class cscreen

hdc = createdc("display", null, null, null); //使用指定的名字為乙個裝置建立裝置上下文環境

scrwidth = getdevicecaps(hdc, horzres); //螢幕寬度

scrheight = getdevicecaps(hdc, vertres); //螢幕高度

hmdc = createcompatibledc(hdc); //建立乙個與指定裝置相容的記憶體裝置上下文環境

if(w==0 && h==0)

else

holdbmp=(hbitmap)selectobject(hmdc, hbmpscreen); //選擇一物件到指定的裝置上下文環境中

bitmap bm; //bmp影象效果好,非壓縮;jpg壓縮,便於網路傳輸

bitmapinfoheader bi; //位圖資訊頭,大小固定40位元組

getobject(hbmpscreen, sizeof(bm), (lpstr)&bm); //得到指定圖形物件的資訊

bi.bisize = sizeof(bitmapinfoheader);

bi.biwidth = bm.bmwidth;

bi.biheight = bm.bmheight;

bi.biplanes = 1;

bi.bibitcount = color_deep;

bi.bicompression = bi_rgb;

bi.bisizeimage = ((((bi.biwidth * bi.bibitcount) + 31) & ~31) / 8) * bi.biheight;

bi.bixpelspermeter = 0;

bi.biypelspermeter = 0;

bi.biclrused = 0;

bi.biclrimportant = 0;

int ncolors = (1 << bi.bibitcount);

if( ncolors > 256 )

ncolors = 0;

dwlen_1 = bi.bisize + ncolors * sizeof(rgbquad);

dwlen_2 = dwlen_1+ bi.bisizeimage;

hdib =new char[dwlen_2];

memcpy(hdib,&bi,sizeof(bi));

buf=hdib+dwlen_1;

buf_len=bi.bisizeimage;

// getscreen(100, 200, w, h); //初始化調色盤資料 }

~cscreen();

void getscreen();

void getscreen(int x, int y, int w, int h);

void setscreentopath(char *path);

void setscreen();

void setscreen(int x, int y, int w, int h);

void joinscrdata(char *data); //載入位圖資料

private:

int scrwidth;

int scrheight;

int dwlen_1;

int dwlen_2;

char *hdib;

hdc hmdc;

hdc hdc;

hdc hhh;

hbitmap hbmpscreen;

hbitmap holdbmp;

hwnd m_hwnd;

};#endif

.cpp檔案如下:

#include "stdafx.h"

#include "screen.h"

cscreen::~cscreen()

deleteobject(hbmpscreen);

deleteobject(holdbmp);

}void cscreen::getscreen()

void cscreen::getscreen(int x,int y,int w,int h)

void cscreen::setscreentopath(char *path)

void cscreen::setscreen()

void cscreen::setscreen(int x,int y,int w,int h)

void cscreen::joinscrdata(char *data) //載入位圖資料

呼叫如下:

void cmydlg::onok() 

delete screen;

cdialog::onok();

}

3、在介面上顯示

imagewnd::imagewnd()

void imagewnd::onpaint() 

遍歷所有視窗控制代碼,擷取視窗螢幕(截圖)

using system using system.runtime.interopservices using system.text using system.collections.generic class csharpapisdemo public windowinfo getalldesk...

程式 視窗 截圖快捷鍵

一 程式 alt tab切換程式 ctrl w關閉程式內當前程式 alt f4關閉程式 桌面的alt f4 關機 二 視窗 ctrl shift w 關閉除鎖定視窗以外的所有視窗 ctrl k 關閉除鎖定視窗和當前視窗以外的所有視窗 windows鍵 m 最小化所有被開啟的視窗 alt 空格 n 最...

根據視窗控制代碼獲取所在程式路徑

var form1 tform1 implementation uses psapi function getproces epath h hwnd string varpid cardinal phandle thandle buf array 0.max path of char begin g...