【问题标题】:Turn Monitor On/Off through remote desktop通过远程桌面打开/关闭监视器
【发布时间】:2015-03-21 23:26:57
【问题描述】:

我正在编写一个小实用程序来打开/关闭我的显示器。我正在使用此处描述的方法 (http://fci-h.blogspot.com/2007/03/turn-off-your-monitor-via-code-c.html),并且我正在用 c# 编写我的实用程序。

到目前为止,当我直接登录到我的机器时,我已经成功地运行了该实用程序并打开/关闭了我的显示器,但是当我通过远程桌面打开连接时尝试切换显示器时出现了问题我的 Windows 7. 上述代码无法关闭或打开显示器。

我猜它与远程桌面有关,但我不确定它是什么以及如何找到解决方法。

有人知道吗?

【问题讨论】:

  • 可能与您登录的会话有关。你在使用 HWND_BROADCAST 吗?
  • 是的。我正在使用 HWND_BROADCAST。我也尝试过冒充另一个用户,但也尝试冒充与它在当前会话中登录的用户相同的用户,但它不起作用!

标签: c# session pinvoke remote-desktop sendmessage


【解决方案1】:

您可能被 UIPI 屏蔽了。如果您查看 SendMessage 的文档,您会在第一个参数上看到以下警告:

消息发送受 UIPI 约束。进程的线程可以发送 消息仅发送到较小或进程中的线程的消息队列 相同的完整性级别。

您可以尝试使用 VNC 而不是远程桌面。当 RDP 连接到 Windows 计算机时,会为客户端创建一个新会话。 VNC 将允许您访问正在执行 VNC 服务器的桌面会话。

请注意,我在这里使用会话一词来指代 Windows 桌面的特定概念,它有自己的特殊规则。你可以read more about windows Sessions here

【讨论】:

  • 您好,感谢您的回复。我真的需要使用 RDP。有没有办法在不签署我的应用程序的情况下绕过 UIPI?
  • 您好我刚刚尝试使用服务通过该服务发送消息,但也让该服务启动另一个 exe 从那里发送消息,但结果是相同的。应该与服务合作吗?服务是否具有更高的完整性级别?
  • 可能,但它不在控制台会话中运行。您可以在控制面板属性中切换一个服务选项,该选项标记为“允许服务与桌面交互”或类似的东西,您是否尝试过启用此功能?
  • 是的,我做到了。该服务还作为本地系统帐户运行。这应该提供最高的安全性是吗?但是,每次我通过服务发送消息时,我已经通过远程桌面连接。这会影响安全级别吗?
  • 即使我没有运行 RDP,我似乎也无法通过服务发送任何消息。有人可以确认是否可以从服务向应用程序发送消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多