Tag: 剪贴板

剪贴板访问的奇怪之处

我正在尝试编写一个需要使用剪贴板来实现某些function的小应用程序。 由于我不想覆盖剪贴板中当前用户的数据,我决定将其保存到内存中,完成我的工作然后再写回来。 下面的代码是一个控制台应用程序,它是我正在尝试做的准系统示例。 我遇到的问题是恢复状态。 如果我在运行应用程序之前从Visual Studio将某些内容复制到剪贴板,则剪贴板中总共有六个对象(各种字符串格式和一个区域设置)都会放入缓存中。 一旦我恢复它们,虽然只有区域设置在剪贴板中,并且每次调用SetData()都会覆盖最后一个。 (顺便说一句,SetDataObject似乎不是GetDataObject的反转,所以我不能只使用它) 我有什么想法可以存储剪贴板状态并在以后恢复它? [STAThread] static void Main(string[] args) { //Store the old clipboard data Dictionary clipboardCache = new Dictionary(); IDataObject clipboardData = Clipboard.GetDataObject(); foreach (string format in clipboardData.GetFormats()) { clipboardCache.Add(format, clipboardData.GetData(format)); } Clipboard.SetText(“Hello world!”); string value = Clipboard.GetText(); Console.WriteLine(value); //Clear the clipboard again and restore old data Clipboard.Clear(); foreach […]

使用c#创建和复制带有文本/标题的超链接到剪贴板

在各种程序中,您可以将超链接复制到剪贴板并将其粘贴到其他应用程序中。 例如,可以将本页底部的“反馈始终欢迎”链接复制并粘贴到MS Word中。 我想以编程方式创建这样的链接,将其复制到剪贴板,然后能够将其粘贴到其他位置。 例如,带有映射到stackoverflow.com的文本Stack的链接。 我用Clipboard.SetData尝试了各种各样的东西,但似乎没有什么可以做的。 (我正在使用VS2010中的Windows表单应用程序,.NET4.0)

剪贴板在.NET 3.5和4中表现不同,但为什么呢?

我们最近将一个非常大的项目从.NET framework 3.5升级到了4,最初一切看起来都是一样的。 但是现在bug已经开始出现在复制粘贴操作上了。 我已经成功制作了一个可重复的小应用程序,它显示了.NET 3.5和4中的不同行为。我还找到了一种解决方法(手动将数据序列化到剪贴板),但我需要知道“为什么“行为有所不同。 这是我制作的小测试应用程序: using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; namespace ClipboardTest { public class Program { [Serializable] public class Element { public Element(string name) { this.name = name; } public string name; } public static List TestSerializer(List obj) { var memoryStream = new MemoryStream(); var formatter = […]

WPF列表框复制到剪贴板

我试图将标准的WPF列表框选中的项目(显示)文本复制到CTRL + C上的剪贴板。 有没有简单的方法来实现这一目标。 如果它是适用于所有列表框的东西,他应用程序..这将是伟大的。 提前致谢。

如何获取剪贴板粘贴通知并提供我自己的数据?

对于我正在编写的小实用程序(.NET,C#),我想监视剪贴板复制操作和剪贴板粘贴操作。 我的想法是在粘贴到任意应用程序时提供我自己的数据。 使用剪贴板查看器可以轻松完成对复制操作的监视。 对我来说似乎更先进的东西是写一个“剪贴板粘贴提供者”: 回答“应用程序的可用格式”查询。 为应用程序粘贴操作提供数据。 我发现这个post和这个post ,但它们似乎都没有真正帮助我。 我猜我不得不模仿/劫持当前的剪贴板。 题: 是否可以在粘贴操作方面“包装”剪贴板并提供我自己的“剪贴板代理”?

用剪贴板选择句子的一部分而不是整个句子

我想要我的程序,而不是选择返回的整个句子,如果复制了那个句子的一部分也是可能的。 这是我的代码: protected override void WndProc(ref Message m) { base.WndProc(ref m); //check if current operation is a clipboard if (m.Msg == WM_DRAWCLIPBOARD) { //then we use a try catch block so if //anything wrong happens in Clipboard.GetText() our program wont crash try { //with foreach we go through all our questions foreach (string question in […]

将文本复制到剪贴板

我在做C#/ .NET应用程序。 我想在工具栏上创建一个按钮,它基本上会调用Ctrl + C(复制到剪贴板)。 我看了剪贴板类,但问题是因为我在表单上有多个文本框,我需要扫描哪一个有焦点,如果/是选择文本,以便从中选择文本等,所以我认为必须有我“单线“解决方案。 有任何想法吗? (另外,如何在相同条件下添加所有3:剪切,复制,粘贴到工具栏 – 主窗体上的多个tekstbox ..)

将BMP转换为内存中的PNG,以便在.Net中粘贴剪贴板

这个类似问题的答案都需要保存文件。 但是,我正在尝试转换文件,然后将其复制到剪贴板。 如何将位图(或任何图像)转换为PNG而不将其保存到文件系统? 更新: 我正在尝试将图像粘贴到应用程序中(在本例中为Evernote)。 当您将图像复制到剪贴板(例如,通过浏览器)时,它会记住它的图像格式,当您将其粘贴时,它将创建具有相同格式的图像。 例如,如果您复制PNG,它将粘贴PNG。 如果您复制JPG,它将粘贴JPG等。 我正在尝试拍摄当前在剪贴板中的任何图像,将其缩放到我想要的大小,然后将其作为PNG保存在剪贴板中,这样当它粘贴到Evernote时,它将创建一个PNG。 当我在浏览器中复制PNG图像时,我看到以下格式: HTML FORMAT , CF_BITMAP , CF_DIB , CF_DIBV5 。 我不确定这些Evernote中哪一个用于粘贴。 我的印象是它是CF_BITMAP ,但在阅读下面的评论后,我猜它正在使用其他格式之一。 如何将图像放在剪贴板中,粘贴时将其视为PNG?

在Windows 10上使用Clipboard.GetImage()后从屏幕截图中删除文本?

这是一个奇怪的问题:我最近将我的工作站从Windows 7升级到Windows 10.我有一个聊天客户端,它使用下面的代码从剪贴板接受图像: if (Clipboard.ContainsImage()) { BitmapSource source = Clipboard.GetImage(); BitmapFrame frame = BitmapFrame.Create(source); var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder(); encoder.Frames.Add(frame); var stream = new MemoryStream(); encoder.Save(stream); byte[] daten = stream.ToArray(); if (daten != null && daten.Length > 0) { sendFile(DateTime.Now.ToString(“yyyyMMddHHmmss_”) + “clipboard.png”, stream.ToArray()); } } 以下是我截图的区域应该是什么样的(例如,如果我将其粘贴到MS-Paint中或直接从截取工具保存): 在使用Clipboard.GetImage();导入屏幕截图后,现在看起来就像这样Clipboard.GetImage(); 。 如您所见,所有文本都被删除,如果您仔细观察,您会发现正常的白色背景现在是透明的。 如果我使用JpegBitmapEncoder而不是PngBitmapEncoder ,它工作正常,所以这是一个编码问题,但是让我感到困惑的是: 这在Windows 7上从未发生过 – Windows […]

使用自定义背景颜色将带alpha通道的图像复制到剪贴板?

代码: private void Foo(Canvas canvas) { // The content is a bit larger… Size size = new Size(canvas.ActualWidth * 1.1, canvas.ActualHeight * 1.2); // Create a render bitmap and push the surface to it RenderTargetBitmap renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32 ); renderBitmap.Render(canvas); // Then copy to clipboard Clipboard.SetImage(renderBitmap); } 我需要的 : […]