SetThreadDesktop,把当前线程切换到你创建的桌面,然后才能操作桌面和处理桌面窗口消息

解决方案 »

  1.   

    我是另外编写的单独的模拟按键和截屏程序,当在“交互桌面”(显示在屏幕上的桌面)上运行时,一切正常。但我用CreateDesktop创建新的桌面并SwitchDesktop到屏幕上后,启动模拟按键和截屏的程序(因而这个程序必然可以处理其关联桌面的窗口消息,另外我修改这个程序在10秒后运作),然后再SwitchDesktop回原来的桌面,等待10多秒后,确认到模拟按键没有生效,且截屏截得的是一幅全黑的图像。(我是用SendInput模拟的按键,截屏用的是BitBlt GetDC(NULL) 到 CreateCompatibleDC(NULL)并保存。)我现在想问一下各位有没有见到在Windows上能实现多用户多桌面的远程控制类的软件,即各个连接上去的用户有自己独立的桌面,可以在里面进行各种操作而不同用户间没有任何影响。
      

  2.   

    你仅仅SwitchDesktop是不够的,必须设置你所在的线程在你创建的桌面下才能接收到这个桌面下的消息,所以,你还必须调用SetThreadDesktop将你线程所在的桌面设成你创建的桌面..
      

  3.   

    上面我所说的就是在新创建的桌面下手动启动程序,那么这个程序相当于用CreateProcess的STARTUPINFO参数的lpDesktop设为新创建桌面的名称而创建的进程,也相当于程序自己已调用SetThreadDesktop关联到这个新创建的桌面,因此是绝对可以操作新创建桌面的所有句柄和消息等的,上面我已小心提到
      

  4.   

    怎么两个地方都有这个帖子?再次Mark。