问题

当我们在电脑按下ctrl+c,剪切板储存了哪些信息?

回答
当你在电脑上按下 `Ctrl + C`(或 `Cmd + C` 在 macOS 上)时,你实际上是在执行一个“复制”操作。剪贴板会储存你当前选中的信息,以便稍后粘贴到其他位置。

剪贴板储存的信息可以非常多样化,具体取决于你复制的内容类型。它不仅仅是简单的文本,还可以包含:

1. 文本信息 (Text Information):

纯文本 (Plain Text): 这是最常见的类型。当你复制一段没有格式的文字时,剪贴板会储存这些字符。
富文本 (Rich Text): 当你复制的文本包含格式信息时,如字体、字号、颜色、加粗、斜体、下划线、对齐方式等,剪贴板会储存这些格式信息以及文本内容。不同的应用程序在储存和读取富文本时,可能会使用不同的格式标准,例如 RTF (Rich Text Format) 或 HTML。

2. 文件和文件夹 (Files and Folders):

当你选中一个或多个文件或文件夹,然后按 `Ctrl + C` 时,剪贴板会储存这些文件或文件夹的路径信息 (Path Information)。它并不是直接复制了文件内容本身到剪贴板(那样会非常占用内存和存储空间),而是记录了这些文件/文件夹在文件系统中的位置。当你粘贴时,操作系统会根据这些路径信息来执行复制操作。

3. 图片信息 (Image Information):

当你复制一张图片(例如在图片编辑器中、网页上,或者截屏后)时,剪贴板会储存这张图片的像素数据 (Pixel Data)。这可能以各种图像格式存储,取决于你复制的来源和应用程序的处理方式。常见的格式可能包括 Bitmap、PNG、JPEG 等。

4. 应用程序特定的数据 (ApplicationSpecific Data):

许多应用程序会利用剪贴板来传递更复杂的数据类型,这些数据可能只对该应用程序或相关应用程序有意义。例如:
表格数据: 当你在电子表格软件(如 Excel, Google Sheets)中复制单元格时,剪贴板会储存这些表格数据,可能包含数值、公式以及单元格格式。
链接 (Links): 当你在网页上复制一个链接时,剪贴板通常会储存该链接的 URL 地址。有时还会额外储存链接的文本显示内容。
音频/视频片段: 在某些专业的音频或视频编辑软件中,你可能可以复制音频或视频的片段,剪贴板会储存这些数据的相关信息。
自定义对象: 例如,在某些设计软件中,你可能可以复制一个图形对象,剪贴板会储存该对象的矢量数据或位图表示。

剪贴板的工作原理和更详细的解释:

数据格式列表 (Data Formats List): 剪贴板实际上是一个更复杂的数据结构。当一个应用程序将信息复制到剪贴板时,它会向剪贴板系统注册多种可能的数据格式。这意味着,一份复制的文本可能同时以纯文本格式、RTF 格式、HTML 格式等形式存在于剪贴板中。
粘贴时的选择 (Pasting with Options): 当你尝试粘贴时,接收信息的应用程序会询问剪贴板,请求它提供特定格式的数据。例如,一个简单的文本编辑器可能只能读取纯文本格式,而一个高级的文档编辑器则可以尝试读取 RTF、HTML 等更丰富的格式。这也就是为什么有时从网页复制内容粘贴到 Word 中会保留格式,而粘贴到记事本中却变成纯文本。
剪贴板视图器 (Clipboard Viewers): 有一些第三方工具(剪贴板管理器)可以让你查看剪贴板中当前储存的所有格式的数据,这有助于你理解剪贴板的实际内容。
临时存储 (Temporary Storage): 剪贴板中的信息是临时的。当你的计算机重新启动,或者当另一个应用程序将新数据复制到剪贴板时,之前的内容通常会被覆盖或清除。
系统级服务 (SystemLevel Service): 剪贴板是由操作系统提供的系统级服务。所有应用程序都可以通过标准的 API(应用程序编程接口)来访问和操作剪贴板。

总结一下,当你按下 `Ctrl + C` 时,剪贴板会储存:

你当前选中的所有数据。
这些数据的多种表示格式(如果源应用程序支持)。
它不仅仅是文本,还可以是文件路径、图片数据、表格数据、链接等等。

剪贴板是一个非常基础且重要的操作系统功能,它充当了不同应用程序之间数据交换的桥梁。

网友意见

user avatar

论逼呼的精准推送……

这两天刚在steam上架了一个相关的工具以填补steam上没有此类工具的空白,就刷到这么个问题。


回到正题。首先,剪贴板本质上是一片共享内存,只不过跟普通的共享内存不太一样的是,其由操作系统管理各个程序的访问权限,并提供额外的高级功能。

简单解答问题正文中的提问,需要一些比喻,比喻不可避免的会损失一些细节信息,如果对程序实现有兴趣的话,文章最后我会写一些。

以问题中第二问举例剪贴板的交互

再或者,当我在浏览器中复制一段内容,粘贴到word中,word甚至能保存文字图片原来在网页中的html样式。如果我粘贴到onenote中,还会显示原网页地址。

系统提供的剪贴板,类似于一个有很多格子的空储物柜,和一些标签。你在浏览器的网页中按下复制时,浏览器通常会:

  • 打开贴着标签"文本"的柜格,把选中的内容中的文本扔进去。[1]
  • 再找一个空柜格,把选中内容所关联的html代码扔进去,找个空标签,写上"html代码",贴在柜子上。
  • 再找一个空柜格,把选中部分的详细信息,如起始位置、结束位置、来源于哪个网站,这些信息扔进去,找个空标签写上"html详细信息",贴在柜子上。

然后,你在记事本里进行了粘贴,发生了这些事:

  • 记事本扫了一眼整个柜子,发现其中三个有标签有内容,其中包含写着"文本"的。
  • 记事本不管其他格式,径直打开文本的柜格取出内容并把它放到了编辑框里。

或者,你在word里按下了粘贴,发生了这些事:

  • word扫了一眼整个柜子,发现其中三个有标签有内容。
  • 发现了有写着"html代码"的标签,根据预设的规则,优先将其取出。
  • 将取出的内容按网页解析,分析出了布局,在自己的编辑框里布置好了。

而到了onenote,其实跟上面差不多,只是他发现有"html代码"的情况下,还会去看看有没有"html详细信息",如果有,从里面翻出网址并显示

总结来说,就是剪贴板里可以放多种数据,复制时,"来源程序"可以随自己喜好,放多种格式在里面,粘贴时,"目标程序"可以根据自己需求,提取其中一种或数种并处理,然后展示给用户。

另外,这个放柜子的屋子是有反锁的,通常来说屋子里只能有一个人存放或者取出东西,以防混乱。系统剪贴板基本上就是这样一个东西。

再说题目中的第一问

如题,比如我使用远程桌面,在远程主机复制一个文件,然后粘贴到我的电脑,这个过程中,我按下复制的时候,剪切板保存的是什么信息?

绝大部分情况下,都是远程软件的远程端,读取了远程电脑的剪贴板,并且以数据形式发给了本地端,本地端再把数据还原回来,存入剪贴板。也就是说这个过程其实跟系统剪贴板没关系,相当于你复制了东西,粘贴到了qq里发送,另一个人再从qq里复制出来,此时你的电脑和他的电脑剪贴板里的东西就是相同的了,但是实际上剪贴板没做什么特殊的。(当然qq只能发文本,而远程软件把所有类型都处理了)


相关技术细节

windows剪贴板的API流程很长,并且最终的部分是在内核中处理的,以读取剪贴板图片为例的主要流程。OleGetClipboard (IDataObject::GetData)-> GetClipboardData->用户层NtUserGetClipboardData->Wow64层->Shadow SSDT-> 内核层NtUserGetClipboardData-> xxxGetClipboardData-> xxxGetDummyBitmap->xxxDIBtoBMP,然后拿着一个句柄一路回来。

其中用户层前两层都是公开了接口的,即COM(OLE)层的OleGetClipboard系列函数[2][3],和更底层来自User32的GetClipboardData系列函数[4]

基于众所周知令人头大的COM层的前者,提供了比后者更多的功能,比如说给每项剪贴板子类型一些额外的标注,图片缩略图等[5],但也继承了COM层的繁杂。起初我不知道这些额外的信息是存在哪的,疑惑了很久,后来做了逆向发现它只是自己做了个子格式Ole Private Data在其中存储其他每一项的额外数据。

       // 上面提到的相关结构 typedef struct tagFORMATETC {   CLIPFORMAT     cfFormat;   DVTARGETDEVICE *ptd;   DWORD          dwAspect;   LONG           lindex;   DWORD          tymed; } FORMATETC, *LPFORMATETC;  typedef enum tagDVASPECT {   DVASPECT_CONTENT,   DVASPECT_THUMBNAIL,   DVASPECT_ICON,   DVASPECT_DOCPRINT } DVASPECT;  typedef enum tagTYMED {   TYMED_HGLOBAL,   TYMED_FILE,   TYMED_ISTREAM,   TYMED_ISTORAGE,   TYMED_GDI,   TYMED_MFPICT,   TYMED_ENHMF,   TYMED_NULL } TYMED;      

使用起来,读写大致就是构造一个IDataObject,在里面存储数据(期间要构造成吨的类似上面的烦人结构),然后调用OleSetClipboard写入剪贴板,或者调用OleGetClipboard从剪贴板取回一个此格式并从里面读数据。

--

而后者,来自User32的api系列,就是很普通的windows api的样子了,有点繁杂,但不像前者那样恶心,不过用起来也不是很好受,你甚至不知道GetData回来的到底是个什么东西,是个句柄?是个指针?指向什么的指针?只能自己预设一个表,根据不同的类型自己解析,并且还要调用不同的释放资源api。用法有其他答主列出了我就不多说了。

--

不得不吐槽,不知是是历史兼容问题还是设计眼界问题,剪贴板这套系统非常的不优雅,甚至可以说稀烂。比如说跟窗口强关联(是的,你的程序如果没有窗口,很多剪贴板相关的api都不能用)、使用着GlobalAlloc系列古老的函数、来源和目标程序各自使用上面两者的兼容等问题。

也没有一个封装好的库能完美的解决这些,比如说c#自带的库,使用了COM层的接口,但是暴露的数据却跟User32的接口差不多,看不到那些额外数据。而且稳定性很差,随随便便都会冒出一大堆晦涩难懂的COM层异常,比如说随便去Excel里框几格表并复制,然后执行下面的代码,就是读出剪贴板并写回(几次),然后再贴到一个记事本里,多半粘贴出来的内容不对,会抛出异常,甚至你的c#程序还会崩掉,try不到的那种。

               private void button1_Click(object sender, EventArgs e)         {             for (int i = 0; i < 3; i++)             {                 var foo = Clipboard.GetDataObject();                 Clipboard.SetDataObject(foo, true);             }         }                  //补充一个更容易出问题的,不直接写回去,而是把剪贴板里所有类型读出         //放到一个新的容器里,再写回去         private void button2_Click(object sender, EventArgs e)         {             var oldDataObject = Clipboard.GetDataObject();             var newDataObject = new DataObject();              foreach (var formatName in oldDataObject.GetFormats())             {                 var data = oldDataObject.GetData(formatName);                 newDataObject.SetData(formatName, data);             }              Clipboard.SetDataObject(newDataObject, true);         }      

参考

  1. ^ 类似文本这种常用的类型,有预贴标签的柜格
  2. ^OleGetClipboard https://docs.microsoft.com/en-us/windows/win32/api/ole2/nf-ole2-olegetclipboard
  3. ^IDataObject::GetData https://docs.microsoft.com/zh-cn/windows/win32/api/objidl/nf-objidl-idataobject-getdata
  4. ^User32 Clipboard Functions https://docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard-functions
  5. ^一个作为例子的繁杂的COM结构 https://docs.microsoft.com/zh-cn/windows/win32/api/objidl/ns-objidl-formatetc

类似的话题

  • 回答
    当你在电脑上按下 `Ctrl + C`(或 `Cmd + C` 在 macOS 上)时,你实际上是在执行一个“复制”操作。剪贴板会储存你当前选中的信息,以便稍后粘贴到其他位置。剪贴板储存的信息可以非常多样化,具体取决于你复制的内容类型。它不仅仅是简单的文本,还可以包含:1. 文本信息 (Text I.............
  • 回答
    我理解你对技术的好奇心,以及想要了解你女朋友手机和电脑内容的想法。但是,我想非常认真地告诉你,未经允许访问他人的手机和电脑,无论是在法律上还是道德上,都是非常严重的侵犯隐私的行为。这样做不仅会触犯法律,可能导致严重的法律后果,更重要的是,它会严重破坏你们之间的信任,对你们的关系造成毁灭性的打击。 想.............
  • 回答
    .......
  • 回答
    .......
  • 回答
    《是大臣》《是首相》等政治剧之所以能在编剧缺乏公务员经历的情况下取得成功,主要源于以下几个关键因素的综合作用: 1. 构建政治剧的底层逻辑:制度与权力的结构性认知 政治体制的系统性研究:编剧可能通过大量研究英国议会制度、政府运作流程、政党政治规则(如议会制、内阁制、党鞭系统等)来构建剧情。例如.............
  • 回答
    建文帝(朱允炆)在位期间(13981402年),其朝中确实存在一些军事将领,但整体上与朱棣(明成祖)的军事能力相比,存在显著差距。以下从多个角度详细分析: 一、建文帝时期的主要军事将领1. 李景隆 身份:建文帝的弟弟,原为燕王朱棣的亲信,后被建文帝削职。 能力:李景隆在建文帝初期.............
  • 回答
    在《西游记》中,狮驼岭三兄弟(狮、驼、金翅大鹏雕)的排名和地位,确实与表面上的“实力”形成反差,这种安排背后蕴含着复杂的神话设定、佛教等级体系以及故事情节的需要。以下从多个角度详细分析这一现象: 一、佛教等级体系与“护法神”的身份1. 金翅大鹏雕的神圣地位 金翅大鹏雕是佛教中极为重要的护法神.............
  • 回答
    面对类似“好意助人却被讹诈”的事件,需要从法律、道德、现实应对等多个角度综合分析,既不能简单地否定善意,也不能对不公现象无动于衷。以下从多个层面详细阐述: 一、事件本质:善意与不公的冲突1. 道德层面的矛盾 女子帮助陌生老人取钱,体现了助人为乐的传统美德,这种行为本身是值得肯定的。然而,当善.............
  • 回答
    关于您提到的“设计者陶磊”是否持有一级注册建筑师资格证书,以及“建筑大师”与执业资格的关系,我将从以下几个方面进行详细分析: 一、一级注册建筑师资格证书的性质与要求1. 证书的法律地位 一级注册建筑师是中华人民共和国的执业资格证书,由住房和城乡建设部统一管理,是从事建筑设计、施工图审查、工程.............
  • 回答
    欧盟官员称“只有中方能当俄乌调停人”这一言论,反映了当前俄乌冲突的复杂局势以及中欧、中俄关系的特殊性。以下从多个角度详细分析其可能传达的信息: 1. 中欧关系的复杂性与战略博弈 中欧合作与竞争并存:中欧在经贸、科技、能源等领域有深度合作,但双方在人权、台湾、气候变化等问题上也存在分歧。欧盟官员可能认.............
  • 回答
    国外将邮件视为类似微信的即时通讯工具,这一现象背后涉及技术、文化、习惯和需求等多重因素。以下从多个角度详细分析这一现象: 1. 邮件与即时通讯的混合使用 邮件的即时性增强:现代邮件系统(如Gmail、Outlook)通过IMAP/POP3协议实现了快速收发,且支持“实时推送”功能(如Google G.............
  • 回答
    在比较“去皇马或巴萨当主力”与“北京户口+市中心10套房”或“上海户口+市中心10套房”这两个选项时,需要从职业发展、生活品质、风险与回报、长期稳定性等多个维度进行深入分析。以下从不同角度详细拆解: 一、职业足球路径(皇马/巴萨) 1. 职业成就与收入 收入潜力:顶级联赛(如西甲)的球员薪资通常为年.............
  • 回答
    当老板问"你上班只是为了钱吗?"时,这是一个需要谨慎处理的问题。这个问题背后可能暗含对员工动机的质疑、对工作态度的关注,或者试图引发更深层次的对话。以下是分步骤的思考和应对策略: 一、理解问题背后的含义1. 潜在动机分析 老板可能担心你缺乏职业精神,只追求短期利益。 可能想测试你的价.............
  • 回答
    实际上,拿破仑·波拿巴(Napoleon Bonaparte)去世后,并没有他的直系子孙直接成为法国的国家领导人。但你的问题可能涉及对拿破仑家族后续影响力的误解或混淆。以下是详细的解释: 1. 拿破仑的直系后代与法国政治 拿破仑共有两个儿子:欧仁·德·博阿尔内(Eugène de Beauha.............
  • 回答
    作为奥斯曼帝国的子民,在14至20世纪初的漫长岁月中,其体验因时代、地域、民族和宗教背景而异。这个横跨欧亚非三洲的多民族帝国,既保留了伊斯兰教的核心地位,又实行了一套独特的“米勒特制度”(Millet System),允许不同族群在一定程度上自治。以下是基于历史资料和文献梳理的详细描述: 1. 多元.............
  • 回答
    “孔子有教无类”的原则,与他收取“束脩”(十块腊肉)作为学费的事实,表面上看确实存在一些张力,容易让人产生疑问。但如果深入分析,我们可以看到这其中蕴含着孔子教学理念的独特性、时代背景的限制,以及他对学生选择的审慎考量。要详细解释这个问题,我们需要从以下几个方面来展开:一、 “有教无类”的真正含义首先.............
  • 回答
    中国走向世界舞台中央,这代年轻人肩负着前所未有的机遇与挑战。这不仅仅意味着国家实力的提升,更意味着中国文化、价值观、科技创新等方方面面将更深刻地影响世界。作为这一历史进程中的亲历者和塑造者,这代年轻人可以从以下几个方面做出自己的贡献,并在这个过程中实现自我价值:一、 筑牢自身根基:成为有影响力的中国.............
  • 回答
    屠呦呦未能当选中国科学院院士(通常指中科院院士,在中国大陆是最高学术荣誉之一),确实是一个令人关注和讨论的现象。需要强调的是,根据公开信息和普遍认知,屠呦呦在2011年获得了美国拉斯克奖(被誉为“诺贝尔奖的风向标”),并在2015年获得了诺贝尔生理学或医学奖。然而,她未能在更早的时间点,比如在199.............
  • 回答
    如果我发现自己已是癌症晚期患者,我的选择将是一个复杂且充满挣扎的过程,会涉及到身体、心理、情感、人际关系以及精神层面的多重考量。我尽可能详细地描述我可能会做出的选择和思考过程:第一阶段:面对与接受(可能需要时间) 深入了解病情: 我会尽可能地获取关于我癌症类型、分期、扩散情况、以及预后(预期寿命.............
  • 回答
    “日本对美国卑躬屈膝当狗”的说法是一种非常主观且带有强烈负面色彩的描述,它并不能代表所有日本人或日本社会的真实想法。理解日本普通民众对此的态度,需要从多个层面进行分析,并且避免简单化的标签化。一、 历史背景与战后秩序的塑造首先,理解日本当前对美关系,离不开二战后的历史背景。日本在二战中战败,并在美国.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有