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++ 如何在屏幕上输出半透明的形状等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)