Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение > Нужна программа просмотра буфера обмена


Автор: gesper 22.12.2014, 00:05
Подскажите, есть какие нибудь программы для просмотра содержимого буфера обмена?
Различные программы выполняют функцию копирования/вставки своих данных через буфер обмена. К примеру, таблицы копируемые в программе как текст негде не вставляются кроме нее. Может есть что то, что поможет сделать в своих программах функцию вставки данных скопированных в чужой программе.

Автор: Akina 22.12.2014, 09:03
Цитата(gesper @  22.12.2014,  01:05 Найти цитируемый пост)
 К примеру, таблицы копируемые в программе как текст негде не вставляются кроме нее.

Это что ж за программа такая? может, там то, что выглядит таблицей, на самом деле и ни разу не таблица...

Автор: gesper 22.12.2014, 12:05
Цитата(Akina @ 22.12.2014,  09:03)
Цитата(gesper @  22.12.2014,  01:05 Найти цитируемый пост)
 К примеру, таблицы копируемые в программе как текст негде не вставляются кроме нее.

Это что ж за программа такая? может, там то, что выглядит таблицей, на самом деле и ни разу не таблица...

Да любая, Word, AutoCAD... У них таблицы есть, и в лучшем случае текст вставляется в Блокнот или ничего. А при вставке в саму программу из которой была сделана копия, мы можем получить не просто таблицу с данными, а еще и форматирование и внешний вид настроенные. В память что то копируется...посмотреть бы что и как оно выглядит )

Автор: Poseidon 22.12.2014, 12:40
Цитата(gesper @  22.12.2014,  12:05 Найти цитируемый пост)
В память что то копируется...посмотреть бы что и как оно выглядит ) 
Копируется таблица как объект. Ты хочешь увидеть это в текстовом виде? Что это даст? Файлы тоже можно в буфер копировать и далеко не только текстовые файлы. Копируются объекты, при вставке программа-приемник смотрит формат объекта и принимает его. Программа-приемник знает что это за объект вставляется и его структуру. Сторонние программы этого знать не могут. И если еще с популярными форматами (текст, Word, AutoCAD и т.д.) можно разобраться, то с остальным никак. Т.е. в принципе не может быть программы, которая бы сама распознавала что там за объект и распознавала его.

Автор: Akina 22.12.2014, 12:55
Цитата(gesper @  22.12.2014,  13:05 Найти цитируемый пост)
В память что то копируется...посмотреть бы что и как оно выглядит 
  • Bitmap - A handle to a bitmap (HBITMAP).
  • Bitmap DIB - A memory object containing a BITMAPINFO structure followed by the bitmap bits.
  • Bitmap DIBV5 - Windows 2000/XP/Vista/7: A memory object containing a BITMAPV5HEADER structure followed by the bitmap color space information and the bitmap bits.
  • Bitmap Display Format - Bitmap display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in bitmap format in lieu of the privately formatted data.
  • Color Palette - Handle to a color palette. Whenever an application places data in the clipboard that depends on or assumes a color palette, it should place the palette on the clipboard as well.
  • Complex Audio Data RIFF - Represents audio data more complex than can be represented in a CF_WAVE standard wave format.
  • Component - Delphi Component.
  • Data for The Pen Extensions - Data for the pen extensions to the Microsoft Windows for Pen Computing.
  • Data Interchange Format - Software Arts'' Data Interchange Format.
  • Enhanced Metafile - A handle to an enhanced metafile (HENHMETAFILE).
  • Enhanced Metafile Display Format - Enhanced metafile display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in enhanced metafile format in lieu of the privately formatted data.
  • HTML Format - HyperText Markup Language Format. HTML is entirely text format (to be, among other things, in the HTML spirit, and uses UTF-8) and includes a description, an optional context, and, within the context, the fragment. 
  • List of Files - A handle to type HDROP that identifies a list of files. An application can retrieve information about the files by passing the handle to the DragQueryFile functions.
  • Locale Identifier - The data is a handle to the locale identifier associated with text in the clipboard. When you close the clipboard, if it contains CF_TEXT data but no CF_LOCALE data, the system automatically sets the CF_LOCALE format to the current input language.
  • Metafile Picture Format  - Handle to a metafile picture format as defined by the METAFILEPICT structure.
  • Metafile-picture Display Format - Metafile-picture display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in metafile-picture format in lieu of the privately formatted data.
  • Microsoft Symbolic Link Format - Microsoft Symbolic Link (SYLK) format.
  • OEM Text - Text format containing characters in the OEM character set. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
  • Owner-display Format - Owner-display format. The clipboard owner must display and update the clipboard viewer window, and receive the WM_ASKCBFORMATNAME, WM_HSCROLLCLIPBOARD, WM_PAINTCLIPBOARD, WM_SIZECLIPBOARD, and WM_VSCROLLCLIPBOARD messages. The hMem parameter must be NULL.
  • Picture - Delphi Picture.
  • Rich Text Format - Rich Text Format RTF.
  • Tagged-image File Format - Tagged-image file format.
  • Text - Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data. Use this format for ANSI text.
  • Text Display Dormat - Text display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in text format in lieu of the privately formatted data.
  • Unicode Text Format - Windows NT/2000/XP/Vista/7: Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
  • Wave - Represents audio data in one of the standard wave formats, such as 11 kHz or 22 kHz Pulse Code Modulation (PCM).

Автор: diadiavova 22.12.2014, 23:00
Цитата(gesper @  22.12.2014,  00:05 Найти цитируемый пост)
 Может есть что то, что поможет сделать в своих программах функцию вставки данных скопированных в чужой программе. 

Думаю, это зависит от языка/технологии, на котором ты пишешь. Вопрос лучше бы задать в соответствующем разделе. Обычно в буфер копируется некий датаобъект, который может содержать несколько версий скопированного. Каждая версия идентифицируется строкой формата, обычно для зарегистрированных строк возможен обмен и между разными программами, например форматы rtf или html понимают многие редакторы, поэтому можно в браузере скопировать что-то и при вставке в тот же ворд ты увидишь, что формат будет сохранен или, к примеру, изменен незначительно.
Программы просмотра буфера обмена существуют, конкретно не посоветую, но можно поискать как-нибудь так
https://www.google.com/search?q=monodevelop&ie=utf-8&oe=utf-8#newwindow=1&q=%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%20%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0%20%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B0
Но, если ты не знаешь, как на используемом тобой языке программирования получить из буфера данные в определенном формате, то вряд ли тебе поможет в этом сторонний софт. 

Автор: gesper 23.12.2014, 12:21
Цитата(diadiavova @ 22.12.2014,  23:00)
Обычно в буфер копируется некий датаобъект, который может содержать несколько версий скопированного. Каждая версия идентифицируется строкой формата, обычно для зарегистрированных строк возможен обмен и между разными программами, например форматы rtf или html понимают многие редакторы, поэтому можно в браузере скопировать что-то и при вставке в тот же ворд ты увидишь, что формат будет сохранен или, к примеру, изменен незначительно.
...
Но, если ты не знаешь, как на используемом тобой языке программирования получить из буфера данные в определенном формате, то вряд ли тебе поможет в этом сторонний софт.

Самому написать программу проблем нет, но это время, которое иногда глупо тратить, если уже что то есть. Какой смысл начинать что то лепить, если возможно есть "монитор" который покажет содержимое в буфере, после копирования и я успокоюсь на мысли, что не смогу раскодировать содержимое?)
Вот ты мне кое что интересное рассказал, о принципах работы с буфером. Я с ним просто раньше не связывался глубже копирования текстов.

Всем откликнувшимся, спасибо)

Автор: diadiavova 23.12.2014, 19:55
Цитата(gesper @  23.12.2014,  12:21 Найти цитируемый пост)
Самому написать программу проблем нет, но это время, которое иногда глупо тратить, если уже что то есть. Какой смысл начинать что то лепить, если возможно есть "монитор" который покажет содержимое в буфере, после копирования и я успокоюсь на мысли, что не смогу раскодировать содержимое?)

Смысл в том, чтобы разобраться какие апи доступа к буферу обмена тебе предоставляет технология, которую ты собираешься использовать для написания программы. Вот я тут набросал простой вьюер буфера, он, конечно не отображает всего и так как надо, но можно будет увидеть по крайней мере что в буфер закидывает та или иная программа, какие форматы использует и т. д. Там отображаются только текстовые форматы и если данные в виде стрима, то он читается как текст юникода, больше ничего не делал. Но мне все-таки непонятно, что тебе даст эта информация? Вряд ли ведь тема создавалась для того, чтобы 
Цитата(gesper @  23.12.2014,  12:21 Найти цитируемый пост)
после копирования и я успокоюсь на мысли, что не смогу раскодировать содержимое?)


На всякий случай прилагаю код кнопки, считывающей данные из буфера.
Код

    Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
        Me.RichTextBox1.Clear()
        Dim dobj = Clipboard.GetDataObject
        For Each f In dobj.GetFormats(True)
            With Me.RichTextBox1
                .SelectionColor = Color.Blue
                .SelectedText = f & vbNewLine
                .SelectionColor = Color.Black
                Dim data = dobj.GetData(f, True)
                Dim dataastext As String
                If TypeOf data Is IO.Stream Then
                    Dim stream = CType(data, IO.MemoryStream)
                    Using sr As New IO.StreamReader(stream, System.Text.Encoding.Unicode, True)
                        dataastext = sr.ReadToEnd
                        dataastext = dataastext.Substring(0, dataastext.Length - 1)
                    End Using
                ElseIf f = "HTML Format" Then
                    dataastext = Clipboard.GetText(TextDataFormat.Html)
                ElseIf f = "Rich Text Format" Then
                    dataastext = Clipboard.GetText(TextDataFormat.Rtf)
                ElseIf f = "Unicode text" Then
                    dataastext = Clipboard.GetText(TextDataFormat.UnicodeText)
                ElseIf TypeOf data Is String Then
                    dataastext = data
                Else
                    dataastext = data.ToString
                End If
                .SelectedText = dataastext & vbNewLine & vbNewLine
            End With
        Next
    End Sub

И документацию по датаобъекту, доступному в дотнете и использованному в программе. Просто для того, чтобы дать представление о методах работы с буфером. Но в других технологиях это может выглядеть и совсем иначе.
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.dataobject%28v=vs.90%29.aspx

Автор: gesper 24.12.2014, 16:38
Цитата(diadiavova @  23.12.2014,  19:55 Найти цитируемый пост)
Но мне все-таки непонятно, что тебе даст эта информация?

Принцип работы AutoCAD с буфером обмена описан тут.
http://autolisp.ru/2011/02/16/clipboard-working/
Как время будет, буду пытать его на предмет того, что в буфере обмена у него, при копировании.
Если, как сказано в статье, он файл создает, то в буфере значит ссылка на файл. Подменить такую запись, создать свой файл и получаем способ вставить данные в AutoCAD его же средствами, без применения API, которое в некоторых версиях не предусмотрено вообще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)