窗口是普通用户创建的, 
我做了一个 windows服务 在后台运行,是 SYSTEM 用户, 可是对 普通用户的窗口 无法进行任何操作。
调用 ::IsWindow() 会返回 false .
请问,后台服务进程 要如何操作 普通用户的窗口呢?

解决方案 »

  1.   

    后台运行的服务,一般是不具有windows窗口操作的权限的.
    单作为服务.它是有权限来获得访问当前windows窗口访问权限的.
    你可以参考vckbase上的例子http://www.vckbase.com/document/viewdoc/?id=1095
      

  2.   

    另外两篇VCKBASE的文章也供参考
    http://www.vckbase.com/document/viewdoc/?id=283
    http://www.vckbase.com/document/viewdoc/?id=1873
      

  3.   

    需要设置服务的桌面交互权限,打开services.msc,选中一个服务,右键“属性”看看
      

  4.   

    3楼的方案在 windows7 下 似乎已经无效了, SYSTEM 会在一个独立的 window station 里进行 桌面交互, 跟用户当前的桌面窗口无法交互。
    nscboy 给的方案我也有试过,SetProcessWindowStation() 和 SetThreadDesktop() 执行中都没有错误,可是还是不能 对一个 用户的窗口句柄进行 ::IsWindow() 操作, 会得到 ERROR_INVALID_WINDOW_HANDLE 错误我的需求是这样的:主程序 以普通用户身份启动,将自己的主窗口句柄保存到一个文件里。 另外以 SYSTEM 权限启动给一个服务, 服务读取 文件里的窗口句柄,并发送 窗口消息给 主程序 。可是 主程序 和 服务器 运行在不同的 window station 里,无法接收到服务的消息。 按照 2-3楼 nscboy 同学给的方案 执行 SetProcessWindowStation() 和 SetThreadDesktop() 以后(执行过程没有出现错误),还是不能与 主程序的窗口交互。  
    我是在 windows7 上测试的,现在已经有很多windows7 用户了,以后 windows7 用户也会越来越多,必须能够在 win7上工作。谢谢~
      

  5.   

    主程序是以Administrator身份运行还是以User身份运行?