- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个简单的 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/
我正在编写一个简单的 Windows 窗体实用程序来截取整个屏幕或事件窗口的屏幕截图并保存文件。 winform 有一个名为“Capture”的按钮,单击该按钮会截取屏幕截图。 我的代码完全适用于整个
一旦有人上传视频,我想将视频的屏幕截图保存为缩略图。他们告诉我这只能在 Windows 服务器上实现。但现在我读到了一些关于 http://www.ffmpeg.org/download.html .
我想在单击“打印屏幕”后自动将图像保存到文件,但我不知道我做错了什么。 private void Form1_KeyDown(object sender, KeyEventArgs e)
我想在单击“打印屏幕”后自动将图像保存到文件,但我不知道我做错了什么。 private void Form1_KeyDown(object sender, KeyEventArgs e)
我正在寻找一种方法来避免用户从一个桌面应用程序截取屏幕截图。是的,这样要求似乎很奇怪,但我们需要它。我尝试使用 OpenGL (SDL_tff) 来呈现文本,但似乎并没有阻止用户截取屏幕截图。拜托,有
如何阻止 PrintScreenButton? 已经看到 Windows PrintScreenButton 的屏幕变白,在另一个实例中,一旦启用 Apple 屏幕捕获功能,屏幕就会变黑.. 这是出于
我试图阻止用户在用 Java 编写的 Web 应用程序中截取屏幕截图。根据我的研究,这似乎不太可能。我确实找到了下面的链接: https://stackoverflow.com/questions/3
我有一点挑战。 在我们产品的早期版本中,我们有一个错误消息窗口(不得已,未处理的异常)显示异常消息、类型、堆栈跟踪 + 各种信息。 这个窗口是打印屏幕友好的,因为如果用户简单地进行打印屏幕捕获,并将屏
我正在使用 C# windows 应用程序 我正在检查用户按下了键盘上的哪个键。我已经检查了所有键,但它在 printScreen 的情况下不起作用 private void comboBox1_Ke
我在某处找到了该代码,我发现它非常有用,但我想找到一种方法使其工作,以便它仅捕获给定的窗口目标。也许带有进程 ID 或窗口名称。即使该窗口未处于事件状态。 我不想使该窗口处于事件状态,但希望获得屏幕截
我想用鼠标单击(启动批处理文件)替换键盘输入 (CTRL PrntSc)。我知道有SEND和SENDKEY代码但是一直没能做出代码 发送("^{Printscreen}") 触发正确的效果。 Auto
我正在尝试检测表单上的 Print Screen 键,但是像 Prtsc 和 SysRq 这样的键不会触发 KeyDown 事件.. private void Form1_KeyDown(ob
我制作了一个简单的 PrintScreen 方法,当我的自动化测试失败时我会使用它。这只是为了让我可以通过电子邮件发送错误和错误发生时屏幕的打印屏幕。这就是 PrintScreen.Save() 的代
我正在用 jQuery 编写一个简单的函数。当我按下键盘上的 1 键时,它会隐藏我的文档。这很好用: document.onkeypress=key1; function key1(e) { if
我正在尝试编写一个包含一些敏感内容的网络应用程序。我已经阻止了复制和粘贴。我如何检测何时有人按下了 printscreen 键,以便在按下该键时隐藏数据? 不用担心手机/相机/录屏软件,环境没有用到。
当使用 Print Screen+Alt 组合键手动捕获窗口时,我得到以下信息: 但如果我尝试使用 Windows API 以编程方式执行此操作,我明白了: 为什么会出现差异?我如何以编程方式获得第一
我试图捕获 Shift+PrintScreen 因为 Ctrl+c 在 this answer 中被捕获. 虽然答案已经过时,但即使我修复了导入,它也不起作用: import pythoncom fr
出于某种原因,我必须在登录后禁用 PrintScreen 键(包括其他键,例如 Alt、Ctrl、F1~F12),所以我编写了一个启动脚本来执行此操作。它必须是: 当我禁用它时,它必须立即禁用,我不必
我目前正在做一个项目,我需要阻止用户拍摄任何网页的快照,为此他可以使用任何普通键盘上的“Print Scrn”/“Printscreen”键。 我一直在努力寻找它的解,但没有成功。如果可能的话,我需要
当他访问特定网页时,我想获取客户端 PC 的“PrintScreen”。 我试过用谷歌搜索这个想法!却收获不多, 事实上,我在 stackoverflow 上了解到的是 Javascript Prin
我是一名优秀的程序员,十分优秀!