【问题标题】:CreateDC(), CreateCompatibleDC() or similar for a memory DC without a desktopCreateDC()、CreateCompatibleDC() 或类似的用于没有桌面的内存 DC
【发布时间】:2021-05-12 12:35:24
【问题描述】:

我想创建一个Memory Device Context,我可以用它来调用GDI 函数、绘制窗口(使用WM_PRINTCLIENT)等,从一个不能访问桌面的程序(例如从一个Windows 服务)没有桌面权限或锁定屏幕)。

通常情况下,我会使用CreateCompatibleDC(),但它需要从源hDC 进行复制,因此如果调用程序没有桌面,则此功能不可用。 CreateDC("DISPLAY",...) 也会因为同样的原因在这里失败。

我需要的是一个软件设备上下文,它能够运行任何正常的 DC 调用,但与我可以用来从中获取结果的特定 BITMAP 相关联。

有没有办法解决这个问题?也许借用打印机驱动程序? (我不需要高性能)。

我需要它才能在 Windows Server 2019 上工作,并且我可以使用 C#、C++ 等。

【问题讨论】:

  • CreateCompatibleDC(nullptr) 不起作用?
  • @JonathanPotter 不跨越会话边界,不
  • @RemyLebeau 我认为我不需要跨越会话边界。我想与与我在同一会话中的程序进行交互;他们都在同一个会话中没有真正的桌面(想想 Docker)。
  • @JonathanPotter 事实证明CreateCompatibleDC(nullptr) 确实 工作,至少在我的情况下。 ??????????‍♂️谢谢。你能把它写成答案,这样我就可以结束我的问题了吗?

标签: winapi gdi


【解决方案1】:

CreateCompatibleDC(nullptr) 将在这种情况下工作。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 2014-09-23
    • 2014-10-12
    • 2017-05-17
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多