我想做个截取屏幕的工具.有什么办法可以做到?!
解决方案 »
- VB MSFlexGrid的CellWidth在哪里设定?
- SQL查询:('字符串' & 字段) as 虚拟字段,此结构 Access 可以,SQL Server 不行?
- 急!!想知道超市刷卡的的卡机控制!
- 我郁闷了!!!!
- 快来帮帮忙,调用EXCEL,ACCESS后怎么再关掉它们
- █████大家看看我的软件,UP有分█████
- 关于软件执行时候出现版本信息的方法
- 急急急!!!!关于数据库编程问题。(100分)
- 紧急求助:关于注册表的键值读取的若干疑问!!!!!
- 难道这就没有什么VB高手吗?(1个DCOM的问题,竟然2天都没人回答...)
- vb或vba中如何调用web service?
- 出现 运行时错误-2147024770,啥力?帮忙一下了,谢谢。
{
CDC dc;
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
int Width=GetSystemMetrics(SM_CXSCREEN);
int Height=GetSystemMetrics(SM_CYSCREEN);
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
///////////////////////////////////
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
bm.GetBitmapBits(size,lpData);
static int filecount=0;
CString name;
name.Format("pict%04d.bmp",filecount++);
name=m_Path+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite)){
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
nCount++;
}
GlobalFreePtr(lpData);
if(nCount==1)
m_Number.Format("%d picture captured.",nCount);
else
m_Number.Format("%d pictures captured.",nCount);
UpdateData(FALSE);
}
GetDC【操作系统】
Win9X:Yes
WinNT:Yes【声明】
GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long【说明】 获取指定窗口的设备场景 【返回值】 Long,指定窗口的设备场景句柄,出错则为0 【其它】 若窗口所属类具有CS_OWNDC,
CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC,
CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC【参数表】
hwnd ----------- Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
【函数】
BitBlt【操作系统】
Win9X:Yes
WinNT:Yes【声明】
BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long【说明】 将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容 【返回值】 Long,非零表示成功,零表示失败。会设置GetLastError 【其它】 在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败
如目标和源DC的映射关系要求矩形中像素的大小必须在传输过程中改变,那么这个函数会根据需要自动伸缩、旋转、折叠、或切断,以便完成最终的传输过程【参数表】
hDestDC -------- Long,目标设备场景 x,y ------------ Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示 nWidth,nHeight - Long,欲传输图象的宽度和高度 hSrcDC --------- Long,源设备场景。如光栅运算未指定源,则应设为0 xSrc,ySrc ------ Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示 dwRop ---------- Long,传输过程要执行的光栅运算
ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" ( _
ByVal hDestDC As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long) As LongPrivate Sub Form_Load()
Me.Hide
Me.AutoRedraw = True
BitBlt Me.hDC, 0, 0, Screen.Width, Screen.Height, _
GetDC(0), 0, 0, vbSrcCopy '抓屏
Dim sFile As String
sFile = "C:\" & Format(Now, "yyyymmddhhmmss") & ".BMP"
SavePicture Me.Image, sFile '保存
MsgBox "当前屏幕图像已经保存到" & sFile, 64
End
End Sub
太感谢你了,,,真的不知道怎么说好...对我们这些菜鸟,你如此的热心....感动呀.....我努力学习,以后也帮助别人~~~~