Esempio n. 1
0
 def format_name(self, format):
     for attr in dir(win32clipboard):
         if attr.startswith("CF_") and getattr(win32clipboard,
                                               attr) == format:
             return attr
     else:
         return win32clipboard.GetClipboardFormatName(format)
Esempio n. 2
0
def print_all_formats():
    """
    Prints all current clipboard formats and their names, for testing purposes only
    """

    # Opens the Clipboard
    clp.OpenClipboard()
    # Enumerates Clipboard Formats
    clp_enum = clp.EnumClipboardFormats(0)
    # Loops over Format Enumerations
    while clp_enum:
        try:
            # Gets the Format Name
            format_name = clp.GetClipboardFormatName(clp_enum)
        except clp.error:
            format_name = "not defined"
        try:
            # Gets the Format
            format = clp.GetClipboardData(clp_enum)
        except clp.error:
            format = "not defined"

        print format_name
        print format
        clp_enum = clp.EnumClipboardFormats(clp_enum)

    # Closes the Clipboard
    clp.CloseClipboard()
Esempio n. 3
0
 def __get_clipboard(self):
     self.logger.info('Getting clipboard contents')
     list_to_csv = [("COMPUTER_NAME", "TYPE", "DATA")]
     r = None
     try:
         r = Tk()  # Using Tk instead because it supports exotic characters
         data = r.selection_get(selection='CLIPBOARD')
         r.destroy()
         list_to_csv.append(
             (self.computer_name, 'clipboard', unicode(data)))
     except:
         if r:  # Verify that r exists before calling destroy
             r.destroy()
         win32clipboard.OpenClipboard()
         clip = win32clipboard.EnumClipboardFormats(0)
         while clip:
             try:
                 format_name = win32clipboard.GetClipboardFormatName(clip)
             except win32api.error:
                 format_name = "?"
             self.logger.info('format ' + unicode(clip) + ' ' +
                              unicode(format_name))
             if clip == 15:  # 15 seems to be a list of filenames
                 filenames = win32clipboard.GetClipboardData(clip)
                 for filename in filenames:
                     list_to_csv.append(
                         (self.computer_name, 'clipboard', filename))
             clip = win32clipboard.EnumClipboardFormats(clip)
         win32clipboard.CloseClipboard()
     return list_to_csv
Esempio n. 4
0
    def csv_clipboard(self):
        """Exports the clipboard contents"""
        # TODO : what happens if clipboard contents is a CSV string ?
        self.logger.info('Getting clipboard contents')
        with open(self.output_dir + '\\' + self.computer_name + '_clipboard.csv', 'wb') as output:
            csv_writer = get_csv_writer(output)
            write_to_csv(["COMPUTER_NAME", "TYPE", "DATA"], csv_writer)

            r = None    #initialize the local variable r
            try:
                r = Tk()  # Using Tk instead because it supports exotic characters
                data = r.selection_get(selection='CLIPBOARD')
                r.destroy()
                write_to_csv([self.computer_name, 'clipboard', unicode(data)], csv_writer)
            except:
                if r != None:   # Verify that r exist before calling destroy
                    r.destroy()
                win32clipboard.OpenClipboard()
                clip = win32clipboard.EnumClipboardFormats(0)
                while clip:
                    try:
                        format_name = win32clipboard.GetClipboardFormatName(clip)
                    except win32api.error:
                        format_name = "?"
                    self.logger.info('format ' + unicode(clip) + ' ' + unicode(format_name))
                    if clip == 15:  # 15 seems to be a list of filenames
                        filenames = win32clipboard.GetClipboardData(clip)
                        for filename in filenames:
                            write_to_csv([self.computer_name, 'clipboard', filename], csv_writer)
                    clip = win32clipboard.EnumClipboardFormats(clip)
                win32clipboard.CloseClipboard()
        record_sha256_logs(self.output_dir + '\\' + self.computer_name + '_clipboard.csv',
                           self.output_dir + '\\' + self.computer_name + '_sha256.log')
    def getFormatName(cls, fmt): # pylint: disable=invalid-name
        """Convert a format identifier (integer) to a readable name"""

        if fmt in cls.FORMATS:
            return cls.FORMATS[fmt]
        try:
            return win32clipboard.GetClipboardFormatName(fmt)
        except:
            return "???"
Esempio n. 6
0
def get_clipboard():
    winclip.OpenClipboard()
    for i in range(0xd0000):
        try:
            d = winclip.GetClipboardFormatName(i)
            #a = winclip.EnumClipboardFormats()
            print str(hex(i)) + " : " + str(d)
        except Exception as e:
            pass
    winclip.CloseClipboard()
Esempio n. 7
0
def GetFormatName(format_id):
    """Get the string name for a format value"""
    # standard formats should not be passed to GetClipboardFormatName
    if format_id in _standard_formats:
        return _standard_formats[format_id]

    win32clipboard.OpenClipboard()
    format_name = win32clipboard.GetClipboardFormatName(format_id)
    win32clipboard.CloseClipboard()

    return format_name
Esempio n. 8
0
    def _update_format_names(self, formats):
        # Retrieve and store the names of any registered clipboard formats
        #  in format_names, if necessary.
        for format in formats:
            if format in self.format_names:
                continue

            # Registered clipboard formats are identified by values in
            #  the range 0xC000 through 0xFFFF.
            if 0xC000 <= format <= 0xFFFF:
                format_name = win32clipboard.GetClipboardFormatName(format)
                self.format_names[format] = format_name
Esempio n. 9
0
def get_clipboard():
    win32clipboard.OpenClipboard()
    #
    if (win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB)):
        try:
            data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)
            data_format = win32clipboard.GetClipboardFormatName(
                win32clipboard.CF_DIB)
        except:
            data = ""
            data_format = ""
    else:
        try:
            data = win32clipboard.GetClipboardData(win32con.CF_UNICODETEXT)
            data_format = win32clipboard.GetClipboardFormatName(
                win32con.CF_UNICODETEXT)
        except:
            data = ""
            data_format = ""
    win32clipboard.CloseClipboard()
    return data, data_format
Esempio n. 10
0
def check_for_file():
    """
    Checks if copied object was a file and then tries to get it's path
    """
    try:
        clp.OpenClipboard()

        clip_enum = clp.EnumClipboardFormats(0)
        while clip_enum:
            try:
                format_name = clp.GetClipboardFormatName(clip_enum)
            except clp.error:
                format_name = "?"
            try:
                format = clp.GetClipboardData(clip_enum)
            except clp.error:

                format = "?"
            if (format_name == '?'):
                print format
                if (len(format) > 0):
                    print "File Source Path: \n", format[0]

                    # Path of the copied file
                    path = format[0]

                    # If path contains .pdf, extract it's metadata
                    if (path[-4:] == '.pdf'):
                        fp = open(path, 'rb')
                        parser = PDFParser(fp)
                        doc = PDFDocument(parser)

                        if 'Title' in doc.info[0]:
                            title = doc.info[0]['Title']
                        else:
                            title = "No Title found"

                        get_crossref_metadata(title, path)

            clip_enum = clp.EnumClipboardFormats(clip_enum)

        clp.CloseClipboard()

    except:
        print "error"
Esempio n. 11
0
def interpretFormatCode(format):
    """
    LONGTERM TODO: This is kept around for debugging but can be deleted from
    production code.
    
    Given a format code (of the kind returned from the windows clipboard
    functions), returns a string describing the meaning of that
    format code.
    """

    formatCodeDictionary = {
        win32con.CF_BITMAP: "Bitmap Handle",
        win32con.CF_DIB: "Bitmap info structure and bits",
        win32con.CF_DIF: "Software Arts' Data Interchange Format",
        win32con.CF_DSPBITMAP: "Private bitmap display format",
        win32con.CF_DSPENHMETAFILE: "Private enhanced metafile display format",
        win32con.CF_DSPMETAFILEPICT: "Private metafile-picture display format",
        win32con.CF_DSPTEXT: "Private text display format",
        win32con.CF_ENHMETAFILE: "Handle to enhanced metafile",
        win32con.CF_HDROP: "HDROP dropped files",
        win32con.CF_LOCALE:
        "Handle to locale information associated with text",
        win32con.CF_METAFILEPICT: "Handle to metafile picture format",
        win32con.CF_OEMTEXT: "OEM Text",
        win32con.CF_OWNERDISPLAY: "Clipboard owner display message",
        win32con.CF_PALETTE: "Handle to a color palette",
        win32con.CF_PENDATA: "Microsoft Pen Computing data",
        win32con.CF_RIFF: "RIFF (Audio data)",
        win32con.CF_SYLK: "Microsoft Symbolic Link Format",
        win32con.CF_TEXT: "Plain Text",
        win32con.CF_TIFF: "TIFF (Tagged Image File Format)",
        win32con.CF_UNICODETEXT: "Unicode Text",
        win32con.CF_WAVE: "Audio data in wav format"
    }

    # Formats above 0xC000 are dynamically registered by other
    # programs; formats below that correspond to named constants.

    if format >= 0xC000:
        return win32clipboard.GetClipboardFormatName(format)
    elif formatCodeDictionary.has_key(format):
        return formatCodeDictionary[format]
    else:
        return "Unknown data format."
Esempio n. 12
0
 def csv_clipboard(self):
     ''' Exports the clipboard contents '''
     # TODO check if it is the same for older windows
     self.logger.info('Getting clipboard contents')
     with open(
             self.output_dir + '\\' + self.computer_name + '_clipboard.csv',
             'wb') as output:
         csv_writer = get_csv_writer(output)
         #output.write('"Computer Name"|"Type"|Data"\n')
         try:
             r = Tk(
             )  # Using Tk instead because it supports exotic characters
             data = r.selection_get(selection='CLIPBOARD')
             r.destroy()
             #data = win32clipboard.GetClipboardData().decode('utf_8')
             write_to_csv([
                 self.computer_name, 'String data in clipboard',
                 unicode(data)
             ], csv_writer)
         except:
             r.destroy()
             win32clipboard.OpenClipboard()
             clip = win32clipboard.EnumClipboardFormats(0)
             while clip:
                 try:
                     format_name = win32clipboard.GetClipboardFormatName(
                         clip)
                 except win32api.error:
                     format_name = "?"
                 self.logger.info('format ' + unicode(clip) + ' ' +
                                  unicode(format_name))
                 if clip == 15:  # 15 seems to be a list of filenames
                     filenames = win32clipboard.GetClipboardData(clip)
                     for filename in filenames:
                         write_to_csv([
                             self.computer_name,
                             'List of files in clipboard', filename
                         ], csv_writer)
                 clip = win32clipboard.EnumClipboardFormats(clip)
             win32clipboard.CloseClipboard()
Esempio n. 13
0
def cb_get_file():
    import win32clipboard

    file_path = None
    win32clipboard.OpenClipboard(None)

    fmt = 0
    while True:
        fmt = win32clipboard.EnumClipboardFormats(fmt)
        if fmt == 0:
            break

        if fmt > 0xC000:
            fmt_name = win32clipboard.GetClipboardFormatName(fmt)
            # print(fmt_name)

            if fmt_name == 'FileNameW':
                data = win32clipboard.GetClipboardData(fmt)
                file_path = data.decode('utf-16').strip('\0x00')

    win32clipboard.CloseClipboard()
    return file_path
Esempio n. 14
0
 def _printFormatEtcs(self, formatEtcs):
     for (format, a, b, c, d) in formatEtcs: #@UnusedVariable
         try:
             print u'Format:', format, win32clipboard.GetClipboardFormatName(format) #$NON-NLS-1$
         except:
             print u'Format not found: ', format #$NON-NLS-1$
Esempio n. 15
0
import win32clipboard as cb
import sys

hdrop = cb.CF_HDROP
cb.OpenClipboard()

print(cb.IsClipboardFormatAvailable(hdrop))

cb.CloseClipboard()
sys.exit()
#########

data = cb.GetClipboardData()

format_name = cb.GetClipboardFormatName(data)
print(format_name)
data = cb.GetClipboardData(hdrop)

cb.CloseClipboard()
Esempio n. 16
0
 def format_names(self):
     for fmt in self.formats:
         yield win32clipboard.GetClipboardFormatName(fmt)
Esempio n. 17
0
def clipboard_changed():
    """
    Gets called everytime the clioboard data is changed. Source extraction always begins here.
    :return: Returns in this method are just used to prevent code from continueing. Actually the extracted sources are then "returned" to the clipboard
    """
    try:
        print "CLIPBOARD CHANGED"

        # Gets current window
        current_window = win32gui.GetWindowText(win32gui.GetForegroundWindow())

        # Gets current app name by window
        app_name = get_app_name(win32gui.GetForegroundWindow())

        # We don't want to do anything when copying in Word
        if app_name == 'WINWORD.EXE':
            return

        # If application is Acrobat Reader, try to extract PDF metadata
        if "AcroRd32.exe" in app_name or "AcroRd64.exe" in app_name:
            last_clipboard_content_for_pdf.append(clipboard.text())

            # Save window ID (when copying in a PDF and then switching windows quickly, the window ID is false sometimes, so we save the first one)
            if (".pdf"
                    in win32gui.GetWindowText(win32gui.GetForegroundWindow())):
                pdf_window_id.append(win32gui.GetForegroundWindow())

            # Clipboard dataChanged fires 5 times when copying in a PDF document, so we execute the function after it's fired for the fifth time
            if (len(last_clipboard_content_for_pdf) % 5 == 0):

                # Get process ID of PDF reader
                process_id = win32process.GetWindowThreadProcessId(
                    pdf_window_id[-1])

                # Gets the PDF metadata, then searches Crossref API and puts the data on the clipboard
                get_pdf_metadata(current_window, process_id)
                return
        else:
            # If clipboard data has HTML-Format, extract the source
            if HTMLClipboard.HasHtml():

                # Source URL of copied content
                source = HTMLClipboard.GetSource()
                print source

                if (source != None):
                    if source != 'about:blank':
                        # Gets metadata from source URL
                        get_metadata_from_url(source)

                    if wikipedia_base_url in source:
                        # Gets the english Wiki citations and puts them on the clipboard
                        put_wiki_citation_to_clipboard(source)
                        return

                    if wikipedia_base_url_german in source:
                        # Gets the german Wiki citations and puts them on the clipboard
                        put_german_wiki_citation_to_clipboard(source)
                        return

                # If clipboard has HTML-Fragment, but the source is 'None', it's an image
                if (source == None):
                    try:
                        print "is image"
                        try:
                            html = ""
                            clp.OpenClipboard(None)
                            clp_enum = clp.EnumClipboardFormats(0)
                            while clp_enum:
                                try:
                                    format_name = clp.GetClipboardFormatName(
                                        clp_enum)
                                except clp.error:
                                    format_name = "?"
                                try:
                                    format = clp.GetClipboardData(clp_enum)
                                except clp.error:
                                    format = "?"
                                if (format_name == "HTML Format"):
                                    print format
                                    html = format
                                    break
                                clp_enum = clp.EnumClipboardFormats(clp_enum)

                            clp.CloseClipboard()

                            # Find the image source URL with beautifulsoup
                            soup = BeautifulSoup(html, "html.parser")
                            link = soup.find('img')['src']
                            print link

                            # Image source URL
                            source = link

                        except:
                            print "could not find source"
                            return

                        # Checks if image was from Wikimedia
                        if "wikimedia" in current_window.lower():
                            # Gets Wikimedia citations
                            meta_data = get_wiki_media_metadata(source)

                            # Puts the extracted citations on the clipboard
                            clp.OpenClipboard(None)
                            sources = {}
                            meta = {}
                            sources['content'] = "image with citation"
                            sources['source'] = source
                            meta['citations'] = meta_data['APA']
                            print meta_data
                            clp.SetClipboardData(src_format,
                                                 json.dumps(sources))
                            clp.SetClipboardData(citation_format,
                                                 json.dumps(meta))
                            clp.CloseClipboard()
                            return
                        # Checks if copied image was from Getty Images
                        if "getty" in current_window.lower():
                            # Gets the image's metadata
                            meta_data = get_getty_image_metadata(source)
                            # Puts the extracted metadata on the clipboard
                            clp.OpenClipboard(None)
                            sources = {}
                            meta = {}
                            sources['content'] = "image with metadata"
                            sources['source'] = source
                            meta['citations'] = meta_data
                            print meta_data
                            clp.SetClipboardData(src_format,
                                                 json.dumps(sources))
                            clp.SetClipboardData(citation_format,
                                                 json.dumps(meta))
                            clp.CloseClipboard()
                            return
                        else:
                            # If the image is not from Wikimedia or Getty Images, extract it's source URL and put it on the clipboard
                            try:
                                clp.OpenClipboard(None)
                                try:
                                    src = clp.GetClipboardData(src_format)
                                except:
                                    src = 'none'

                                # After putting the data on the clipboard, clipboardChanged is called again. In this case we return and do nothing
                                if "image" in src:
                                    clp.CloseClipboard()
                                    return
                                else:
                                    # Put the image source on the clipboard
                                    sources = {}
                                    sources['content'] = "image"
                                    sources['source'] = source
                                    clp.OpenClipboard(None)
                                    clp.SetClipboardData(
                                        src_format, json.dumps(sources))
                                    print clp.GetClipboardData(src_format)
                                    clp.CloseClipboard()
                                    return
                            except:
                                # If above code fails, try to put the source on the clipboard anyway
                                sources = {}
                                sources['content'] = "image"
                                sources['source'] = source
                                clp.OpenClipboard(None)
                                clp.SetClipboardData(src_format,
                                                     json.dumps(sources))
                                print clp.GetClipboardData(src_format)
                                clp.CloseClipboard()
                                return
                    except:
                        print "image exception"

                # If clipboard contains HTML data, but everything above fails, try to put the URL and the content on the clipboard
                clp.OpenClipboard(None)
                sources = {}
                sources['source'] = source
                sources['content'] = unicode(clp.GetClipboardData(clp.CF_TEXT),
                                             errors='replace')
                clp.SetClipboardData(src_format, json.dumps(sources))
                clp.CloseClipboard()

            else:
                # If clipboard has no HTML-content, check if it's a file
                check_for_file()
    except:
        # Close the clipboard, if there was an exception when trying to extract sources
        try:
            clp.CloseClipboard()
        except:
            print "Clipboard was not open"
        print "exception"