首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为使用createdesktop api创建的桌面截图

为使用createdesktop api创建的桌面截图
EN

Stack Overflow用户
提问于 2011-01-03 05:07:21
回答 2查看 4K关注 0票数 3

我正在使用createdesktop api创建桌面,我想在不显示桌面的情况下拍摄屏幕截图或发送输入鼠标/键盘给user.any ideeas,了解如何实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-03 06:45:26

编辑:这对隐形桌面不起作用,我已经看过我的旧代码,我发现我需要它来捕捉 active 桌面的屏幕截图(它是而不是 'WinSta0\Default'),以获得我使用OpenInputDesktop的活动用户桌面的句柄。

+1 ThievingSix你是对的,

对于我的误解,很抱歉。

您需要使用SetThreadDesktop (如果您通过CreateDestkop创建桌面,那么您就有它的句柄,并将其传递给SetThreadDesktop)。切换桌面线程后,可以抓取截图。一个好主意是为线程恢复到以前的桌面(不‘破坏’其他/未来的代码)。

代码语言:javascript
运行
复制
var
  lOldDesktop: HDESK;
begin
  lOldDesktop:= GetThreadDesktop(GetCurrentThreadId);
  try
    if not SetThreadDesktop(ADesktop) then // pass handle to your desktop, or dekstop handle obtained from OpenInputDesktop
      {error handle, like RaiseLastOSError or Exit(False)};

    // your screenshot/input/mouse code here

  finally
    if lOldDesktop<> 0 then // GetThreadDesktop can fail (I don't know condition when this GetThreadDesktop(GetCurrentThreadId) could fail)
      SetThreadDesktop(lOldDesktop); // revert thread to previous desktop
  end;
end;

这段代码应该像ThievingSix指出的那样在非主线程中运行,因为在这种情况下SetThreadDesktop可能会失败。安全的方法是生成线程来制作截图。

PS。我不确定这是否适用于“发送输入鼠标/键盘”(应该可以),但对于屏幕截图有效。

编辑

http://blogs.technet.com/b/askperf/archive/2007/07/24/sessions-desktops-and-windows-stations.aspx

  • Desktop tool ( http://technet.microsoft.com/en-us/sysinternals/cc817881

)-

  • 有关会话、窗口站、桌面的更多信息,请单击此处-SysInternals
票数 3
EN

Stack Overflow用户

发布于 2011-01-04 01:27:57

我发现的简短答案是你不能,你不能截取一个非活动桌面的屏幕截图,因为没有画图调用,因为没有可见的窗口可以重绘。

您可以执行SwitchDesktop()调用,屏幕截图,然后返回SwitchDesktop()。用户不会注意到这一点,但你可能不会在屏幕截图中得到太多,因为在这么短的时间内窗口没有时间重新绘制。

另外,您必须创建一个新线程来调用SetThreadDesktop()。如果您使用主线程来执行此操作,则在使用GUI应用程序时将失败。当当前桌面中有一个窗口时,SetThreadDesktop()会失败。

SysInternals有一个管理多个桌面的应用程序(如linux桌面交换机)。当您要选择要切换到的桌面时,它会显示桌面的缩略图。此缩略图不是实时的,它是在用户处于该桌面时由最后一次已知的完全重绘捕获的。简而言之,如果SysInternals不能进行实时截图,我怀疑我们中的任何一个人都能做到。

这当然是基于我自己对这个确切特征的研究。如果有人真的让它工作了,我很想知道,所以我也不能使用它!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4580520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档