gpt4 book ai didi

c# - C# 和远程桌面问题的屏幕截图

转载 作者:可可西里 更新时间:2023-11-01 12:28:04 24 4
gpt4 key购买 nike

我有一个 C sharp 控制台应用程序,可以多次捕获 MS Word 文档的屏幕截图。它工作得很好,但是当我将这个应用程序放在远程 Windows XP 机器上时它工作正常,而我在远程桌面是可见的,但是如果我运行我的应用程序并离开远程桌面(最小化它,甚至 log我想关闭它)它拍摄的屏幕截图是空白的!

屏幕截图应用程序由以 SYSTEM 用户身份运行的服务运行。

即使没有用户连接,我怎样才能让 GUI 为 windows 保持事件状态?

这是我使用的代码:

public Image CaptureWindow(IntPtr handle)
{
// get te hDC of the target window
IntPtr hdcSrc = User32.GetWindowDC(handle);
// get the size
User32.RECT windowRect = new User32.RECT();
User32.GetWindowRect(handle, ref windowRect);
int width = windowRect.right - windowRect.left;
int height = windowRect.bottom - windowRect.top;
// create a device context we can copy to
IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
// create a bitmap we can copy it to,
// using GetDeviceCaps to get the width/height
IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);
// select the bitmap object
IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);
// bitblt over
GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
// restore selection
GDI32.SelectObject(hdcDest, hOld);
// clean up
GDI32.DeleteDC(hdcDest);
User32.ReleaseDC(handle, hdcSrc);

// get a .NET image object for it
Image img = Image.FromHbitmap(hBitmap);
// free up the Bitmap object
GDI32.DeleteObject(hBitmap);

return img;
}

更新

我目前正在使用 PrintWindow,这是唯一最接近的东西,因为它设法捕获窗口框架(即最小化、最大化和关闭按钮),但内部是黑色的。

虽然它还没有完全起作用,但它向我证明了可以从窗口句柄创建图像,而应用程序甚至对用户不可见。

最佳答案

前段时间我们在做类似的事情,发现当RDC最小化时,远程桌面 session 不会重绘,也不会接受按键或鼠标事件。一切正常,直到我们最小化 RDC 屏幕。一位同事发现这样做是出于性能原因。

几天前我偶然发现了这个,但我还没有机会尝试。如果您尝试成功,请告诉我:)

Interacting with remote desktop when RDC is minimized

关于您的评论:我认为这是另一种问题...我知道即使没有人登录到机器,您也需要您的应用程序正常工作。我已经实现了允许与桌面交互的服务,例如,启动应用程序并使其自动化。即使没有人登录机器,您仍然可以操作 UI,例如,使用 UI 自动化库(或者您的代码,我假设)。

启动机器后,当我的服务和自动化应用程序运行时,一切正常。稍后,自动化的UI会出现在第一个登录的人的桌面上(我是机器管理员,不知道权限小的人登录会怎样)。

如果第一次登录通过RDC,不知道会怎么样。也许您可以尝试更改那些影响应用程序行为的 RDC 设置 ID。另一种选择是:

  1. 禁用 RDC 并将窗口配置为使用指定帐户自动登录
  2. 使用另一个远程桌面应用程序(例如 TightVNC)连接到这台机器

这有帮助吗?

关于c# - C# 和远程桌面问题的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com