【问题标题】:Black screenshots using c++ and cygwin sshd service使用 c++ 和 cygwin sshd 服务的黑色截图
【发布时间】:2011-08-01 14:48:12
【问题描述】:

尝试在 windows xp 上使用 c++ 捕获屏幕截图时遇到问题。

代码类似这样:

hDc = CreateCompatibleDC(0);
hBmp = CreateCompatibleBitmap(GetDC(0), width, height);
HGDIOBJ obj = SelectObject(hDc, hBmp);
BitBlt(hDc, 0, 0, width, height, GetDC(0), 0, 0, SRCCOPY);

它在机器上正常运行,但是当我使用 ssh 登录到 cygwin shell 时,我只得到一个运行相同代码的黑色屏幕截图。 BitBlt 返回 0,GetLastError 返回 6,表示句柄无效。但是没有一个句柄是 0。所以我怎么能做到这一点,我有点迷茫到底是什么问题。

【问题讨论】:

    标签: c++ winapi cygwin screenshot sshd


    【解决方案1】:

    当您通过 SSH 登录 Cygwin 时,您没有屏幕(至少没有一个 Windows 知道如何查看):您只有 sshd 服务 - 所以您无法截屏。

    【讨论】:

      【解决方案2】:

      您的登录会话可能没有使用桌面 DC 的权限,因为它不是桌面的一部分。

      编辑:如果您只想获取 Cygwin 窗口的屏幕截图,您可以使用 GetConsoleWindow 函数来获取该窗口的 HWND - 假设它存在于sshd 会话。

      【讨论】:

      • 相反,GetDC(0) 为它自己的私有桌面返回一个 DC,那里没有运行应用程序,所以它是黑色的。
      • @Ben,这无法解释从 BitBlt 返回的错误。我确定位图是黑色的,因为它是这样初始化的。
      • 在这种情况下,难道不会出现错误 5 (ERROR_ACCESS_DENIED) 而不是错误 6 (ERROR_INVALID_HANDLE) 吗?服务桌面的 DC 可能没有RC_BITBLT 功能。
      猜你喜欢
      • 2017-07-19
      • 2013-07-18
      • 2013-09-05
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多