小弟做了一个服务程序,用于对桌面进行抓图操作,系统在XP下面能正常运行,抓图也比较流畅,但如果安装在win 7下面,抓出的图是一个空白(灰白)的bmp图,一次无意在网上看到一篇文章说win 7有多个桌面,请问在win 7 下如何用服务程序抓用户的桌面。谢谢 //----(1)捕捉屏幕图像----
try
des := GetDesktopWindow;
ScreenDC:= GetDC(des);
ScreenBmp:= TBitmap.Create;
ScreenBmp.Width:= GetDeviceCaps(ScreenDC, HORZRES);
ScreenBmp.Height:= GetDeviceCaps(ScreenDC, VERTRES);
BitBlt(ScreenBmp.Canvas.Handle, 0, 0, ScreenBmp.Width-1, ScreenBmp.Height-1,ScreenDC, 0, 0, SRCCOPY);
//----(2)转化成JPEG图像----
JPEGImage:= TJPEGImage.Create;
JPEGImage.Assign(ScreenBmp);
JPEGImage.CompressionQuality:= Quality;
JPEGImage.Compress;
//----(3)将JPEG图像保存到数据流中
Stream.Size:= 0;
JPEGImage.SaveToStream(Stream);
//----(4)释放资源
finally
JPEGImage.Free;
ScreenBmp.Free;
ReleaseDC(des, ScreenDC);
end;
就类似远程桌面,多个人同时登录了,但是看不到别人的桌面
session0是会话,Service-0x0-3e7$是窗口站(还可能有别的),Default是桌面,是一级一级从属的关系用户看到的桌面是ConsoleSession(可能是0,1,2...)\WinSta0\Default缺省情况下服务程序的窗口站肯定是和用户看到的桌面所在的窗口站不同,windows vista起连会话都不会相同你需要在ConsoleSession(用WTSGetActiveConsoleSessionId得到)中的WinSta0窗口站的Default桌面创建一个进程,由这个进程来截图
http://www.88dev.com/forum-viewthread-tid-73-fromuid-2.html 这篇帖子兴许对你有用
不懂delphi
我的正常
http://hi.baidu.com/xingyan126/blog/item/ff3e8f627d176ad3e6113a4a.html
换一个api试试吧 估计这个GetDesktopWindow不中