我的远程控制软件的被控端是以服务形式并由svchost.exe加载启动的.在2k/xp/2003下,都能正常截取到屏幕的图象.可在Vista下,就是黑屏.看了点资料,好象和服务的SESSION有关,从Vista开始服务的Session集中在session0.而普通的用户层都集中在session1. 如何解决这个问题呢? 谢谢指教.

解决方案 »

  1.   

    只能是另外在用户session中创建一个进程来处理。
      

  2.   

    进程?EXE?乖乖,我还希望继续使用原来的DLL服务模式呢.
      

  3.   

    先通过控制面板,用户帐户,取消UAC,用户帐户控制,看看问题是否存在
    有可能和这有关系
      

  4.   

    UAC用于控制用户行为,在安装的时候可能会有所影响. 和抓屏应该无关.顶那,哪个高人指点下.
      

  5.   

    貌似vista下普通gdi就能全抓到
      

  6.   

    遇到同样问题了,楼主解决了告诉 下方法,我找到办法也会在这里回你的。 visata 汗阿!
      

  7.   

    这个问题和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, 将使用桌面。 
      

  8.   

    可以看一下这个:
    http://www.codeproject.com/KB/vista-security/VistaSessions.aspx里面的server应该不用改,在他创建的进程里截取到屏幕的图象看看。
    应该可以。我做过这个功能的简单试验(因为是工作用的,代码不能提供,对不起),就是参照这个的。
      

  9.   

    Vista 的桌面是 Direct3D 画出来的,其它操作系统的桌面是 GDI 画出来的。正如你的程序在XP里抓不到 D3D 游戏画面一样,你当然抓不到 Vista 的桌面。去找一个专门抓 DX 图片的源码看看。你需要检查操作系统版本,在Vista里用D3D抓图,在其他OS里用GDI抓图。
      

  10.   

    借宝地请教下楼上的兄弟,vista上基本都是3d的,我听朋友说直接抓图都可以抓到,我知道你的意思是说使用了硬件加速,所以抓不到,不过好象vista上没有这个问题,你确定不能抓到吗?
      

  11.   

    我确实抓到了。而且动画也可以抓到,DVD,WMV,3D。
      

  12.   

    我什么时候说抓不到了?D3D 屏幕是可以抓的,但是不能用抓 GDI 桌面的方法抓。
      

  13.   


    ok,我没说清楚,我就是想确认一下,gdi方式抓不到vista下的d3d屏幕??我一个朋友说vista下gdi方式可以全部抓到,所以我问问,因为以前开发xp下的抓图,对overlay方式做了专门的处理,后来和朋友说到这个问题,他透漏说vista下gdi全能抓,说简单多了,我手里没vista系统,所以不确定
      

  14.   

    http://topic.csdn.net/u/20071219/15/a04b0e23-f8fb-4a2e-94e8-c4b0d3aa5443.html
      

  15.   

    vista下你也可以配置成不启用D3D,那样就和XP一样是gdi的桌面。但是如果按缺省配置启用了D3D,你就不能用GDI来抓了。
      

  16.   

    好几天没来了,居然有这么多恢复.目前最佳的答案应该就是二楼的回答->"只能是另外在用户session中创建一个进程来处理"只是这个解决方法我感觉不是特别完美.尤其是对于远程控制或则木马这样尽量不想要出现进程的程序来说.微软实在是大手笔,这么大的修改,也不考虑那么多程序的兼容性问题.唉.