Vista下抓屏为何是黑屏. 我的远程控制软件的被控端是以服务形式并由svchost.exe加载启动的.在2k/xp/2003下,都能正常截取到屏幕的图象.可在Vista下,就是黑屏.看了点资料,好象和服务的SESSION有关,从Vista开始服务的Session集中在session0.而普通的用户层都集中在session1. 如何解决这个问题呢? 谢谢指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只能是另外在用户session中创建一个进程来处理。 进程?EXE?乖乖,我还希望继续使用原来的DLL服务模式呢. 先通过控制面板,用户帐户,取消UAC,用户帐户控制,看看问题是否存在有可能和这有关系 UAC用于控制用户行为,在安装的时候可能会有所影响. 和抓屏应该无关.顶那,哪个高人指点下. 貌似vista下普通gdi就能全抓到 遇到同样问题了,楼主解决了告诉 下方法,我找到办法也会在这里回你的。 visata 汗阿! 这个问题和desktop有关,在普通的画面下用winsta0//default,UAC,logoff,FUS,lock的时候可以用winsta0//logon.在你的服务里用CreateProcessAsUser,参数中的STARTUPINFO 的成员lpDesktop根据当前的状态用"winsta0\\default"或"winsta0//logon"。Token用SYSTEM用户的就应该可以了。不过有个问题是什么时候在UAC状态不知道怎么判断。其它的状态可以用服务的SessionChange消息来判断。下面是desktop有关的一点说明:通过的 CreateProcessAsUser 函数, 启动进程时进程将会启动到 windowstation 和桌面组合根据 lpDesktop STARTUPINFO 结构参数中的值: • 如果 windowstation 和桌面组合 lpDesktop 成员, 中指定系统将尝试启动到该 windowstation 和桌面进程。 • 如果 lpDesktop 成员初始化为 NULL, 系统将尝试使用同一 windowstation 和桌面作为调用进程如果系统是与交互 windowstation。 • 如果不 lpDesktop 成员初始化为 NULL, 系统将创建新 windowstation 和桌面, 您无法看到。 • 如果用空字符串, 初始化系统 " "、 将或者创建新 windowstation 和桌面, 无法看到, 或通过相同如果之一是否已创建通过的以前调用访问令牌, 现有 windowstation, 将使用桌面。 可以看一下这个:http://www.codeproject.com/KB/vista-security/VistaSessions.aspx里面的server应该不用改,在他创建的进程里截取到屏幕的图象看看。应该可以。我做过这个功能的简单试验(因为是工作用的,代码不能提供,对不起),就是参照这个的。 Vista 的桌面是 Direct3D 画出来的,其它操作系统的桌面是 GDI 画出来的。正如你的程序在XP里抓不到 D3D 游戏画面一样,你当然抓不到 Vista 的桌面。去找一个专门抓 DX 图片的源码看看。你需要检查操作系统版本,在Vista里用D3D抓图,在其他OS里用GDI抓图。 借宝地请教下楼上的兄弟,vista上基本都是3d的,我听朋友说直接抓图都可以抓到,我知道你的意思是说使用了硬件加速,所以抓不到,不过好象vista上没有这个问题,你确定不能抓到吗? 我确实抓到了。而且动画也可以抓到,DVD,WMV,3D。 我什么时候说抓不到了?D3D 屏幕是可以抓的,但是不能用抓 GDI 桌面的方法抓。 ok,我没说清楚,我就是想确认一下,gdi方式抓不到vista下的d3d屏幕??我一个朋友说vista下gdi方式可以全部抓到,所以我问问,因为以前开发xp下的抓图,对overlay方式做了专门的处理,后来和朋友说到这个问题,他透漏说vista下gdi全能抓,说简单多了,我手里没vista系统,所以不确定 http://topic.csdn.net/u/20071219/15/a04b0e23-f8fb-4a2e-94e8-c4b0d3aa5443.html vista下你也可以配置成不启用D3D,那样就和XP一样是gdi的桌面。但是如果按缺省配置启用了D3D,你就不能用GDI来抓了。 好几天没来了,居然有这么多恢复.目前最佳的答案应该就是二楼的回答->"只能是另外在用户session中创建一个进程来处理"只是这个解决方法我感觉不是特别完美.尤其是对于远程控制或则木马这样尽量不想要出现进程的程序来说.微软实在是大手笔,这么大的修改,也不考虑那么多程序的兼容性问题.唉. 深入CTime类 在用setwindowrgn透明的窗体中如何添加按钮,及其响应事件(c++) 快过虎年了买点什么礼物带回家? 请问伴随exe生成的lib文件的作用是什么? 为什么dc重绘后鼠标出不来?? 谁能解释一下这个初始化语句?STARTUPINFO si = {sizeof(si)}; 请帮分析一下下面的程序 evc中用LoadLibrary载入一个Activex控件出错 请教DHCP接口函数 如何操作以GetOpenFileName方式打开的文件夹内的文件 AnimateWindow函数参数类型问题 有谁知道MSDN下载地址的吗
有可能和这有关系
不过有个问题是什么时候在UAC状态不知道怎么判断。其它的状态可以用服务的SessionChange消息来判断。下面是desktop有关的一点说明:
通过的 CreateProcessAsUser 函数, 启动进程时进程将会启动到 windowstation 和桌面组合根据 lpDesktop STARTUPINFO 结构参数中的值: • 如果 windowstation 和桌面组合 lpDesktop 成员, 中指定系统将尝试启动到该 windowstation 和桌面进程。
• 如果 lpDesktop 成员初始化为 NULL, 系统将尝试使用同一 windowstation 和桌面作为调用进程如果系统是与交互 windowstation。
• 如果不 lpDesktop 成员初始化为 NULL, 系统将创建新 windowstation 和桌面, 您无法看到。
• 如果用空字符串, 初始化系统 " "、 将或者创建新 windowstation 和桌面, 无法看到, 或通过相同如果之一是否已创建通过的以前调用访问令牌, 现有 windowstation, 将使用桌面。
http://www.codeproject.com/KB/vista-security/VistaSessions.aspx里面的server应该不用改,在他创建的进程里截取到屏幕的图象看看。
应该可以。我做过这个功能的简单试验(因为是工作用的,代码不能提供,对不起),就是参照这个的。
ok,我没说清楚,我就是想确认一下,gdi方式抓不到vista下的d3d屏幕??我一个朋友说vista下gdi方式可以全部抓到,所以我问问,因为以前开发xp下的抓图,对overlay方式做了专门的处理,后来和朋友说到这个问题,他透漏说vista下gdi全能抓,说简单多了,我手里没vista系统,所以不确定