怎么通过API获取当前桌面所显示的内容

怎么通过API获取当前桌面所显示的内容,第1张

QQ远程协助和Microsoft 远程桌面连接、以及Remote Admin的远程桌面,实现的方法都是截屏》发送》还原。

也就是说,每隔一段时间就截取当前屏幕,然后发送到另一台计算机显示,看起来就好像是直接连接了对方的桌面。

至于远程连接之后的远程控制功能,则是在本地截取了鼠标按下的位置、按下的键和按下次数之类的信息,发送到远程主机,然后由远程主机端程序用API或其他方式模拟出相应的鼠标、键盘消息。

所以,只要截屏就可以了,API的话,用BitBlt就可以

函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);

BitBlt函数需要的HDC变量,可以通过GetDC函数得到

函数原型:HDC GetDC(HWND hWnd);

调用GetDC函数传入桌面句柄0,就可以拿到桌面DC,然后调用BitBlt复制桌面图像并保存成数据流或中间文件,再发送到远程主机就可以了。

如果你还有疑问,请补充问题

//我给你加个注释吧

//获取屏幕指定点的颜色

public Color GetColor(int x, int y)

{

int hdc = GetDC(IntPtr Zero ); //获取屏幕HDC句柄

uint pixel = GetPixel(hdc, x, y); //获取屏幕上(x,y)点的颜色值,这个值是一个32位无符号整数。

ReleaseDC(IntPtrZero, hdc); //释放HDC句柄

//ColorFromArgb(red颜色分量,green颜色分量,blue颜色分量)

//pixel & 0x000000FF取低8位red色颜色分量

//(pixel & 0x0000FF00) >> 8 去8-16为green颜色分量,并且右移8位

//其他类似

Color color = ColorFromArgb((int)(pixel & 0x000000FF), (int)(pixel & 0x0000FF00) >> 8, (int)(pixel & 0x00FF0000) >> 16);

return color;

}

可以使用css3实现,一般的做法是用两个层,一个用于放文字,另一个用于做透明背景,因为透明滤镜的效果会影响到里面的内容。

<html>

<head>

<title>透明效果</title>

<style>

alpha1,alpha2{

width:100%;

height:auto;

min-height:250px;/ 必需 /

_height:250px;/ 必需 /

overflow:hidden;

background-color:#FF0000;/ 背景色 /

}

alpha1{

filter:alpha(opacity=20); / IE 透明度20% /

}

alpha2{

background-color:#FFFFFF;

-moz-opacity:08; / Moz + FF 透明度20%/

opacity: 08; / 支持CSS3的浏览器(FF 15也支持)透明度20%/

}

ap2{

position:absolute;

}

</style>

</head>

<body>

<div class="alpha1">

<div class="ap2">

<p>透明效果 背景为红色(#FF0000),透明度20%。</p>

</div>

<!--[if IE]><![if !IE]><![endif]--> <div class="alpha2"></div> <!--[if IE]><![endif]><![endif]-->

</div>

</body>

</html>

int nWidth=GetSystemMetrics(SM_CXSCREEN); int nHeight=GetSystemMetrics(SM_CYSCREEN); for(int i=0;i<nWidth;i++) { for(int j=0;j<nHeight;j++) { HDC hDC = ::GetDC(NULL); //获取屏幕DC //2、 获取当前鼠标位置像素值 CPoint pt; ptx=nWidth; pty=nHeight; COLORREF clr = ::GetPixel(hDC, ptx, pty); if() //你要做的判断 { } } }

HBITMAP holdbitmap,hbitmap;

HDC hdc,hscreendc,hmemdc;

hdc=GetWindowDC(hwnd);//获得整个hwnd指向的窗口的DC

GetWindowRect(hwnd,&rect);//获得窗口矩形

hscreendc=CreateDC("DISPLAY",NULL,NULL,NULL);//获得整个屏幕的设备DC

hmemdc=CreateCompatibleDC(hdc);//创建与设备DC兼容的内存DC

hbitmap=CreateCompatibleBitmap(hscreendc,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES)); //创建与屏幕DC兼容的位图

holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将hbitmap指向的位图选入内存DC,返回值为原来的位图holdbitmap,先保存下来后面恢复

BitBlt(hmemdc,0,0,rectright-rectleft,rectbottom-recttop,hscreendc,0,0,SRCCOPY);//将设备DC的图象复制到内存DC,这样就把屏幕图象保存到hbitmap所指向的BITMAP结构体中了

点击按钮后,再用BitBlt显示出来:

case WM_COMMAND:

holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将保存图象的hbitmap选进内存DC

BitBlt(hdc,0,0,rectright-rectleft,rectbottom-recttop,hmemdc,0,0,SRCCOPY);//将内存DC的图象显示到窗口上

以上注意hbitmap变量的作用范围

以上就是关于怎么通过API获取当前桌面所显示的内容全部的内容,包括:怎么通过API获取当前桌面所显示的内容、c# 返回指点坐标点颜色的代码,请指教、C/C++ 如何在屏幕上输出半透明的形状等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9765521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存