I've been using the code below for 20 years now for text copy & paste. No guarantees, though.

Regards,

Dietmar


def copy_to_clipboard(text, window_handle=0):
    """copy_to_clipboard(window_handle, text):
    copy a string to the clipboard."""
    win32clipboard.OpenClipboard(window_handle)
    try:
        win32clipboard.EmptyClipboard()
        if sys.version_info.major==2:
            is_unicode = isinstance(text, str)
        else:
            is_unicode = True
        if is_unicode:
win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT, text)
        else:
            win32clipboard.SetClipboardText(text)
    finally:
        win32clipboard.CloseClipboard()

_formats = {}
def _format_to_number(format):
    if not format in _formats:
        number = win32clipboard.RegisterClipboardFormat(format)
        _formats[format] = number
    return _formats[format]

#def copy_from_clipboard(format=win32clipboard.CF_TEXT, window_handle=0):
def copy_from_clipboard(format=win32clipboard.CF_UNICODETEXT, window_handle=0):
    win32clipboard.OpenClipboard(window_handle)
    if isinstance(format, str):
        format = _format_to_number(format)
    try:
        ret = win32clipboard.GetClipboardData(format)
    except TypeError:
        return None
    finally:
        win32clipboard.CloseClipboard()
    return ret



#def check_clipboard_format(format=win32clipboard.CF_TEXT, window_handle=0):
def check_clipboard_format(format=win32clipboard.CF_UNICODETEXT, window_handle=0):
    if isinstance(format, str):
        format = _format_to_number(format)
    win32clipboard.OpenClipboard(window_handle)
    try:
        return win32clipboard.IsClipboardFormatAvailable(format)
    finally:
        win32clipboard.CloseClipboard()


def get_clipboard_formats(window_handle=0):
    format = 0
    formats = []
    win32clipboard.OpenClipboard(window_handle)
    standard_formats = {}
    for n in dir(win32clipboard):
        if not n.startswith("CF_"): continue
        standard_formats[getattr(win32clipboard, n)] = n[3:]
    try:
        while True:
            format = win32clipboard.EnumClipboardFormats(format)
            if not format:
                break
            if format in standard_formats:
                formats.append(standard_formats[format])
            else:
                formats.append( win32clipboard.GetClipboardFormatName(format) )
    finally:
        win32clipboard.CloseClipboard()
    return formats


_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to