vb.net屏幕抓图 windows窗口抓图

VB.NET当鼠标停在屏幕任意地方,得到该点的颜色

我有个笨办法,先用API抓图到内存里,然后再在根据你点鼠标的屏幕工作区坐标,去那图里取色。

为乌翠等地区用户提供了全套网页设计制作服务,及乌翠网站建设行业解决方案。主营业务为网站制作、网站建设、乌翠网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

-----------------------

'抓图所需的API

Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Integer) As Integer

Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer

Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer

Private Declare Function BitBlt Lib "GDI32" (ByVal srchDC As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer) As Integer

Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Integer) As Integer

Private Declare Function DeleteObject Lib "GDI32" (ByVal hObj As Integer) As Integer

Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Integer) As Integer

Const SRCCOPY As Integer = HCC0020

'抓图的部分

Dim hDC, hMDC As Integer

Dim hBMP, hBMPOld As Integer

Dim sw, sh As Integer

hDC = GetDC(0)

hMDC = CreateCompatibleDC(hDC)

sw = Screen.PrimaryScreen.Bounds.Width

sh = Screen.PrimaryScreen.Bounds.Height

hBMP = CreateCompatibleBitmap(hDC, sw, sh)

hBMPOld = SelectObject(hMDC, hBMP)

BitBlt(hMDC, 0, 0, sw, sh, hDC, 0, 0, SRCCOPY)

hBMP = SelectObject(hMDC, hBMPOld)

Dim bmp As Bitmap = Image.FromHbitmap(New IntPtr(hBMP))

DeleteDC(hDC)

DeleteDC(hMDC)

DeleteObject(hBMP)

......

'取点的颜色

bmp.GetPixel(e.X, e.Y)

----------------------------

关键就是这些你自己组合吧,你分给的太少了,很麻烦,恕我不帮你改全了。如果要仔细帮你改,请另开高分贴,不要用新马甲来

VB.NET如何实现撷取区域屏幕

既然能够取得整个屏幕,可以取到整个屏幕以后创建一个全屏窗体显示静态的屏幕图像,然后在窗体上实现部分截取。

估计别的截图也是这个原理,因为一点开始截图屏幕就变为静态不动了,肯定是在截图初期复制了当时的屏幕场景

vb.net 2008 如何将指定的窗体截图并保存

INTOUCH自带的就有,打印屏幕的命令

自己写个时间条件运行那命令就可以了

PRINTSCREEN这个命令 具体怎么用 看下帮助

希望我的回答对你有所帮助

如有其他问题,可以继续追问,您的采纳是我前进的动力!

VB 如何实现DX\GDI 技术截屏?

屏幕抓图至少分为3个步骤:

(1) 启用鼠标指针捕获。

(2) 在鼠标指针所在处的窗口进行绘图,提示抓图的目标。

(3) 选定目标窗口时,将目标窗口的画面保存为自定义的位图并终止鼠标指针捕获。

以下是具体的编程步骤:

(1)在Visual C++ .NET中按照GDI+程序的框架新建一个基于对话框的项目ScreenCapture,然后准备好一个外形为相机的光标文件(*.cur),将之引入资源管理器(IDC_CAMERA)。接着在CScreenCaptureDlg类中加入以下两个全局变量:

HWND hwndCapture;

Crect rectCapture;

(2)通过类向导加入对WM_MOUSEMOVE及WM_LBUTTONUP事件的响应函数,分别如下所示。

void CScreenCaptureDlg::OnMouseMove(UINT nFlags, CPoint point)

{

//如果用户按隹鼠标左键不放,则开始抓取图片

if(nFlags==MK_LBUTTON){

//隐藏程序窗口,以免影响在抓取时的“视野”

ShowWindow(SW_HIDE);

//载入“照相机”鼠标指针,开始追踪鼠标指针的移动

HCURSOR cur=LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CAMERA));

SetCursor(cur);

SetCapture();

//获得鼠标指针所在窗口的句柄

this-ClientToScreen(point);

hwndCapture=(HWND)::WindowFromPoint(point);

//取得屏幕的设备环境句柄,以便在屏幕的任何位置绘图

HDC hDC=::GetDC(NULL);

//建立一个红色的画笔

HPEN hPen=CreatePen(PS_INSIDEFRAME,6,RGB(255,0,0));

//将绘图模式设为R2_NOTXORPEN,在绘图时可以不破坏原有的背景

int nMode=SetROP2(hDC,R2_NOTXORPEN);

HPEN hpenOld=(HPEN)SelectObject(hDC,hPen);

//得到鼠标指针所在窗口的区域

::GetWindowRect(hwndCapture,rectCapture);

//在鼠标指针所在处的窗口四周画一红色的矩形,做为选定时的提示

POINT pt[5];

pt[0]=CPoint(rectCapture.left,rectCapture.top);

pt[1]=CPoint(rectCapture.right,rectCapture.top);

pt[2]=CPoint(rectCapture.right,rectCapture.bottom);

pt[3]=CPoint(rectCapture.left,rectCapture.bottom);

pt[4]=CPoint(rectCapture.left,rectCapture.top);

::Polyline(hDC,pt,5);

//延时后再重绘红色矩形,这样不会破坏原有的内容

Sleep(100);

::Polyline(hDC,pt,5);

::SelectObject(hDC,hpenOld);

::ReleaseDC(NULL,hDC);

}

CDialog::OnMouseMove(nFlags, point);

}

void CScreenCaptureDlg::OnLButtonUp(UINT nFlags, CPoint point)

{

// 得到鼠标指针所在窗口的区域宽、高

int nWidth=rectCapture.Width();

int nHeight=rectCapture.Height();

HDC hdcScreen,hMemDC;

HBITMAP hBitmap,hOldBitmap;

//建立一个屏幕设备环境句柄

hdcScreen=CreateDC("DISPLAY",NULL,NULL,NULL);

hMemDC=CreateCompatibleDC(hdcScreen);

//建立一个与屏幕设备环境句柄兼容、与鼠标指针所在窗口的区域等大的位图

hBitmap=CreateCompatibleBitmap(hdcScreen,nWidth,nHeight);

//把新位图选到内存设备描述表中

hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);

//把屏幕设备描述表拷贝到内存设备描述表中

BitBlt(hMemDC,0,0,nWidth,nHeight,hdcScreen,rectCapture.left,rectCapture.top,SRCCOPY);

DeleteDC(hdcScreen);

DeleteDC(hMemDC);

//返回位图句柄

//打开剪贴板,并将位图拷到剪贴板上

OpenClipboard();

EmptyClipboard();

SetClipboardData(CF_BITMAP,hBitmap);

//关闭剪贴板

CloseClipboard();

MessageBox("屏幕内容已经拷到剪贴板!");

ReleaseCapture();

//恢复窗口显示模式

ShowWindow(SW_NORMAL);

CDialog::OnLButtonUp(nFlags, point);

}

至此,一个具有专业效果的屏幕抓图程序的核心已经搞定。

VB.net点击按钮后截图,截取被当前窗体挡住的图像作为窗体背景(窗体默认无边框样式)

'没办法,需的把窗口隐藏一下,还的隐藏后延迟一下再截图。

Dim WithEvents Timer1 As New Timer With {.Interval = 30, .Enabled = False}

Dim Imgrect As Rectangle

Dim img As Bitmap

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Imgrect = Me.RectangleToScreen(Me.ClientRectangle)

img = New Bitmap(Imgrect.Width, Imgrect.Height)

Me.Hide()

Timer1.Start()

End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Timer1.Stop()

Graphics.FromImage(img).CopyFromScreen(Imgrect.X, Imgrect.Y, 0, 0, Imgrect.Size)

Me.BackgroundImage = img

Me.Show()

End Sub


本文题目:vb.net屏幕抓图 windows窗口抓图
网站链接:http://myzitong.com/article/hgoced.html