剪贴板在.NET 3.5和4中的表现不同,但为什么?
我们最近将一个非常大的项目从.NET Framework 3.5升级到4,最初一切似乎都起作用.但是现在错误已经开始出现在复制糊操作上. 我设法制作了一个小的可重现应用程序,该应用显示了.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 {
0 2024-04-17
编程技术问答社区
从剪贴板上获取含有重音字符的CSV数据(从Excel粘贴)。
方案 我的用户将从Excel复制单元格(从而将其放入剪贴板中) 我的应用程序将从剪贴板中检索这些单元 问题 我的代码从剪贴板检索CSV格式 但是,如果原始excel内容包含ä(a with umlaut)之类的字符,则检索CSV字符串没有正确的字符(ä最终显示为"正方形"对我来说是"正方") 相比,如果我的代码从剪贴板中检索Unicode文本格式,则所有内容都可以正常工作:ä保存在剪贴板检索的字符串中 源代码 - 原始 - 与问题 [STAThread] static void Main(string[] args) { var fmt_csv = System.Windows.Forms.DataFormats.CommaSeparatedValue; // read the CSV var dataobject = System.Windows.Forms.Clipboard.GetDataObject(); va
0 2024-04-17
编程技术问答社区
c# Clipboard返回null,但不能为空
我正在尝试获得一个链接,该链接是在单击上生成并粘贴在剪贴板上的链接.我尝试了我能找到的一切.但是我总是会收到" null",即使当我手动将链接粘贴到记事本上时,我明白了. 我在每个定义的数据构造中尝试了此代码,但是一切都返回了null. string clipboardText = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString(); 解决方案 来自示例: using System.Windows.Forms; // Need this for console app namespace ClipboardTest { class Program { // Without this attribute, will get null [STAThreadAttribute] static void Main(string[] a
0 2024-04-17
编程技术问答社区
用System.Windows.Clipboard获取原数据源?
我正在使用System.Windows.Clipboard复制一些文本,我想知道有机会获得原始源, 例如a我从中复制它的文件,或网站,文件夹....? 谢谢 解决方案 win32 然后,您可以将返回的手柄传递到 getWindowThreadProcessID()获取该窗口的流程ID和线程ID. 回到.NET领域,您可以将过程ID用作传递到System.Diagnostics.Process.GetProcessById()方法的参数,以检索所需的信息. 请注意,您必须构建一个64位应用程序才能完全检查64位 过程.如果您的项目具有更喜欢32位选项集,则有些 信息将不可用. 另请参见: 如何获取更新剪贴板的应用程序ID或名称? Windows API声明.超载GetClipboardOwnerProcessID()包装器方法返回剪贴板所有者的ProcessID,并且(可选)其线程ID. public class WinApi { [D
0 2024-04-17
编程技术问答社区
复制文本到剪贴板
我正在做C#/.网络应用程序.我想在工具栏上制作一个按钮,该按钮基本上将调用CTRL+C(复制到剪贴板).我看剪贴板类,但是问题是因为我在表单上有多个文本框,所以我需要扫描哪个具有焦点,如果/是/是/选择文本,以便从中选择文本等,所以我认为必须有我"单线"解决方案. 有什么想法? (另外,如何添加所有3:剪切,复制,粘贴到工具栏,在相同的条件下 - 主形式的多个TekStbox.) 解决方案 编辑:如果是Winforms .. 将其放在您的调用功能中: Clipboard.SetText(ActiveControl.Text); 如下所述,丹尼尔·阿布·奇利(Daniel Abou Chleih):如果您必须与控件进行互动以调用功能 将更改为该控件.这仅在您通过其他方式称呼它的情况下有效. 编辑: 不是单线,而是在最后一个活动的文本框上工作: private Control lastInputControl { get; set; } pr
0 2024-04-17
编程技术问答社区
ClipBoard Monitor C#
可能的重复: 剪贴板事件C# 嗨, 我可以连续监视剪贴板以进行任何副本操作吗?我正在使用C# 谢谢 解决方案 这里有一些更有用的链接,带有源代码: 监视活动:观众:其他解决方案 您需要使用Win32 API,此
0 2024-04-17
编程技术问答社区
当从数据网格视图复制粘贴到Excel时,如何保持颜色?
我使用以下单元格式代码在我的datagridview中有条件地颜色行. private void SGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.ColumnIndex == SGridView.Columns["Name"].Index ) { DataGridViewRow row = SGridView.Rows[e.RowIndex]; SBomRow BomRow = (SBomRow )row.DataBoundItem; switch (BomRow.UsageType()) { case (UsageType.NE): break; case (UsageType.SV):
0 2024-04-16
编程技术问答社区
如何防止系统剪贴板图像数据被粘贴到WPF的RichTextBox中?
我目前有一些代码,可以拦截所有剪切,复制和粘贴事件到WPF中的RichTextbox中.这些旨在将除纯文本以外的所有内容剥离,并且不允许粘贴除纯文本(通过使用检查剪贴板.containstext()方法.)这似乎成功地防止了所有此类操作从表格.用户只能复制,剪切和粘贴文本,而不允许使用图像/音频数据/随机垃圾. 但是,如果我使用print屏幕函数,然后将其粘贴到一个richtextbox中,则图像粘贴在(不是想要的行为)中. 'T让您(所需的行为). 我目前覆盖的命令是使用 完成的 // Command handlers for Cut, Copy and Paste commands. // To enforce that data can be copied or pasted from the clipboard in text format only. CommandManager.RegisterClassComm
0 2024-04-16
编程技术问答社区
如何将CF_DIBV5从剪贴板(Format17)转换为透明位图?
gdi+不支持CF_DIBV5格式,但是当几个应用程序将透明图像放在剪贴板上时,他们使用CF_DIBV5(格式17)格式来维护Alpha Channel. .NET框架无法处理CF_DIBV5格式,因此.NET应用程序无法将Alpha images放置或从剪贴板中删除. 是否有任何C#代码支持CF_DIBV5从剪贴板进行位图转换? 解决方案 对不起!我正在回答自己的问题: [StructLayout(LayoutKind.Sequential)] public struct BITMAPV5HEADER { public uint bV5Size; public int bV5Width; public int bV5Height; public UInt16 bV5Planes; public UInt16 bV5BitCount; public uint bV5Compression; public uint bV5SizeIma
0 2024-04-16
编程技术问答社区
在BackgroundWorker中获取剪贴板上的数据
我有一个背景工人,在陶库方法中,我有以下内容: var clipboardData = Application.Current.Dispatcher.Invoke(new Action(() => { Clipboard.GetData(DataFormats.Serializable); })); 为什么这总是返回null,即使我知道剪贴板上有正确格式的数据? 解决方案 尝试将呼叫调用到sta线程中: object data = null; Thread t = new Thread(() => { data = Clipboard.GetData(DataFormats.Serializable); }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); // 'data' should be set here. 在具有"题为"动作的方法中: void GetCli
2 2024-04-16
编程技术问答社区
C# 将excel文本格式的数据添加到剪贴板上
在C#中,我需要将数据网格行复制为Excel.由于连续的某些值是双打,因此" -Infinity"值是可能的. 我尝试将行复制为DataFormats.UnicodeText或DataFormats.Text,但这给了我输出" #NAME?",我应该看到" -Infinity"(因为Excel会自动插入" ="由于标准单元格的格式,在" -Infinity"中减去之前). 当我在粘贴之前将单元格式为" Text"时,Excel不会在" ="之前自动插入" =".顺便说一句,我不需要对Excel中的双重值进行任何计算,因此文本形式对我来说是可以的. 所以我的问题是如何将数据复制到剪贴板并将其粘贴到Excel中,同时将单元格式设置为"文本". 解决方案 从原始剪贴板查看器开始,您可以看到复制 到剪贴板会导致Excel向剪贴板扔大量不同的格式. 其中大多数没有帮助,但是其中一些是Excel的内部,这意味着(几乎)保证数据将与复制相同.如果我是您,我可能会瞄
0 2024-04-16
编程技术问答社区
将带有阿尔法通道的图像复制到剪贴板,并自定义背景颜色?
代码: 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
0 2024-04-15
编程技术问答社区
我如何将OpenXML放到剪贴板上,以便将其粘贴到Excel中?
我正在使用Microsoft的documentformat.openxml库生成OpenXML.我正在弄清楚如何将此文档输入剪贴板,以便可以将数据粘贴到Excel中(好像是从Excel复制的).当我从Excel中复制时,我可以看到OpenXML从Excel中脱颖而出的数据.我需要进行反向,从WPF应用程序中复制,然后使用高级Excel格式(因此需要OpenXML)粘贴到Excel中. 这是我到目前为止所拥有的片段: MemoryStream documentStream = new MemoryStream(); SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(documentStream, SpreadsheetDocumentType.Workbook, true); // create the workbook spreadsheet.AddWorkbookPart(); Str
0 2024-04-15
编程技术问答社区
在锁定的Windows 10机器的后台进程中把文本放到剪贴板上
我正在构建一个过程(到目前为止,我尝试了VBA,Python和C#在.NET Framework 4.7.2上),该过程需要在锁定屏幕后面的Windows 10机器上将一些字符串放在Windows 10机器上. 为了进行测试,我只将其简化为两个命令(伪代码,因为使用了3种语言. SleepForFiveSec(); //to provide time for locking screen // now locking machine SetClipboardContent(); 剪贴板在未锁定的会话上响应迅速,但变得不可用,并在机器锁定时返回"剪贴板锁定"错误(特定于语言). 我已经测试了在Google/Stackoverflow中找到的几种相关技术,用于上述语言(总计6种),到目前为止均无效. 机器正在Windows 10 Enterprise上运行(在3个不同版本的3个不同的计算机上测试). 代码示例: c#opt 1: using System.
0 2024-04-15
编程技术问答社区
剪贴板访问的奇怪之处
我正在尝试编写一个小型应用程序,该应用程序需要使用剪贴板来进行某些功能.由于我不想在剪贴板中覆盖用户的数据,因此我决定将其保存到内存中,然后做我的工作然后写回.下面的代码是一个控制台应用程序,是我要做的准则示例. 我遇到的问题正在恢复状态.如果我在运行应用程序之前将某些内容从Visual Studio复制到剪贴板上,则剪贴板中总共有六个对象(各种字符串格式和一个语言环境)都放在缓存中.一旦我将它们恢复了,但只有该语言环境就在剪贴板中,并且会出现每个呼叫setData()覆盖最后一个. (顺便说一下,setDataObject似乎不是getDataObject的倒数,所以我不能只使用它) 有什么想法我如何存储剪贴板状态并以后还原? [STAThread] static void Main(string[] args) { //Store the old clipboard data Dictionary
0 2024-04-15
编程技术问答社区
C# Clipboard.GetText()
如何在非静态线程中获取剪贴板文本? 我有一个解决方案,但我正在尝试获得最干净/最短的方法. 正常调用时,结果作为空字符串出现. 解决方案 我会添加一个助手方法,该方法可以在MTA主线程中以STA线程运行一个操作. 我认为这可能是实现它的最干净的方法. class Program { [MTAThread] static void Main(string[] args) { RunAsSTAThread( () => { Clipboard.SetText("Hallo"); Console.WriteLine(Clipboard.GetText()); }); } /// /// Start an Action within an STA Thread
0 2024-04-14
编程技术问答社区
在.Net中把BMP转换为PNG用于剪贴板粘贴的内存中
此类似的问题的答案都要求保存文件.但是,我正在尝试转换文件,然后将其复制到剪贴板. 如何在不保存到文件系统的情况下将位图(或任何图像)转换为PNG? 更新: 我正在尝试将图像粘贴到应用程序中(在这种情况下为Evernote).当您将图像复制到剪贴板中(例如,通过浏览器)记住其图像格式,并且将其粘贴到剪贴板中时,它将创建具有相同格式的图像.例如,如果您复制PNG,它将粘贴PNG.如果您复制JPG,它将粘贴JPG,等等. 我正在尝试将剪贴板中当前的任何图像缩放到我想要的尺寸,然后将其作为png放在剪贴板中,以便当它粘贴到Evernote中时,它将创建PNG. 当我在浏览器中复制PNG图像时,我会看到以下格式:HTML FORMAT,CF_BITMAP,CF_DIB,CF_DIBV5.我不确定这些Evernote中的哪一个用于粘贴.我的印象是它是CF_BITMAP,但是在阅读了下面的评论后,我想是使用其他格式之一. 如何将图像放在剪贴板中,该图像在粘贴时将被视为
0 2024-04-14
编程技术问答社区
如何用C#将CSV数据粘贴到Windows剪贴板上
我要完成的工作 我的应用程序生成一些表格数据 我希望用户能够启动Excel并单击"粘贴"以将数据作为excel中的单元格放置 Windows接受一种称为" commaseparatedValue"的格式,该格式与API一起使用,因此这似乎可能 将原始文本放在剪贴板上有效,但是尝试使用这种格式不是 注意:我可以从剪贴板中正确检索CSV数据,我的问题是将CSV数据粘贴到剪贴板上. 我尝试过的不起作用的 剪贴板.setText() System.Windows.Forms.Clipboard.SetText( "1,2,3,4\n5,6,7,8", System.Windows.Forms.TextDataFormat.CommaSeparatedValue ); 剪贴板.setData() System.Windows.Forms.Clipboard.SetData( System.Windows.Forms.DataForma
0 2024-04-14
编程技术问答社区
WebBrowser 复制图片到剪贴板
我正在使用WebBrowser控件,并希望将网页上的特定图像复制到剪贴板.我知道我可以使用webbrowser.document.execcommand方法来复制页面的当前选择区域,但无法弄清楚如何指导选择以覆盖特定的htmlelement或页面的区域. . 任何帮助都非常感谢! 解决方案 我没有写这篇文章,但前一段时间发现它会帮助您. 3206780/re-image-in-webbrowser.aspx IHTMLDocument2 doc = (IHTMLDocument2) webBrowser1.Document.DomDocument; IHTMLControlRange imgRange = (IHTMLControlRange) ((HTMLBody) doc.body).createControlRange(); foreach (IHTMLImgElement img in doc.images) { imgRange.add((IHTM
0 2024-04-14
编程技术问答社区
复制二进制数据到剪贴板
如何在剪贴板中复制二进制数据?例如,如果我将数字1打包为4字节的小型整数,我希望我的剪贴板显示00 00 00 01 对于文本数据,这是微不足道的,可以选择具有Unicode文本或ASCII文本. Clipboard.SetData(DataFormats.Text, "Some text"); Clipboard.SetData(DataFormats.UnicodeText, "赤"); 但是,对于二进制数据,我不知道该怎么办. 解决方案 实际上有两种方法可以做到这一点: 第一个,以及迄今为止最简单的:您只需将字节数组放入剪贴板即可.这将自动序列化字节数组,并在检索时进行序列化,并且您需要做的就是检查typeof(Byte[]).实际上,这适用于任何可序列化类型(并且您可以可以与[Serializable]属性序列化序列化). 放在剪贴板上: public void PutBytesOnClipboardObj(Byte[] byteArr)
0 2024-04-13
编程技术问答社区