[python-win32] Clipboard Documentation

Dietmar Schwertberger maillist at schwertberger.de
Wed Dec 1 11:33:03 EST 2021


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




More information about the python-win32 mailing list