gpt4 book ai didi

c# - PrintScreen 仅事件窗口

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:57 26 4
gpt4 key购买 nike

我正在编写一个简单的 Windows 窗体实用程序来截取整个屏幕或事件窗口的屏幕截图并保存文件。 winform 有一个名为“Capture”的按钮,单击该按钮会截取屏幕截图。

我的代码完全适用于整个屏幕,但无法在事件窗口中找到它。

根据我当前的代码,如果我选择“事件窗口”,它最终会打印筛选应用程序本身,这不是我想要的。

这是我的代码(在 Capture_Click 方法下):

try
{
this.Hide();

bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
//bmpScreenshot = new Bitmap(this.Bounds.Width, this.Bounds.Height, PixelFormat.Format32bppArgb);

gfxScreenshot = Graphics.FromImage(bmpScreenshot);

if (AltPrint.Checked)
{
gfxScreenshot.CopyFromScreen(this.Bounds.X, this.Bounds.Y, 0, 0, this.Bounds.Size, CopyPixelOperation.SourceCopy);
}
else
{
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
}

bmpScreenshot.Save(SaveLocation, ImageFormat.Png);

number++;
}

最佳答案

在你的 button_Click 方法中,要捕获一个窗口而不是正在捕获的窗口,我能看到的唯一可能的方法是利用 user32 Windows API。

您首先需要平台调用一些这样的方法:

[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, GetWindowLongNIndex nIndex);

我推荐www.pinvoke.net/有关这方面的更多信息。

这是我自己的 Window 类(正在进行中,但可用),欢迎您将其用作示例:http://pastebin.com/fj2tEaPY

其中一些对您有用的属性是:

  • 获取AllWindows
  • 获取任务栏Windows
  • 设置ForegroundWindow

您需要获取当前窗口的句柄(使用 get ForegroundWindow,然后是 Handle 属性),然后找到您要捕获的窗口图像,可能使用类似于 TaskbarWindows 中的代码。一旦你有窗口,你将需要发送按键 Alt + PrtScn (同样可能使用 user32 API,但我不会去进入其中。)然后使用静态 ForegroundWindow 属性使用您在开始时保存的句柄将原始窗口设置为前景。

祝你好运!

关于c# - PrintScreen 仅事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692441/

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