[pywin32-checkins] pywin32/com/win32com/demos dump_clipboard.py,NONE,1.1
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <mha...@us...> - 2003-10-08 04:26:03
|
Update of /cvsroot/pywin32/pywin32/com/win32com/demos In directory sc8-pr-cvs1:/tmp/cvs-serv13592 Added Files: dump_clipboard.py Log Message: Demo of extracting clipboard data using COM. --- NEW FILE: dump_clipboard.py --- import pythoncom import win32con formats = """CF_TEXT CF_BITMAP CF_METAFILEPICT CF_SYLK CF_DIF CF_TIFF CF_OEMTEXT CF_DIB CF_PALETTE CF_PENDATA CF_RIFF CF_WAVE CF_UNICODETEXT CF_ENHMETAFILE CF_HDROP CF_LOCALE CF_MAX CF_OWNERDISPLAY CF_DSPTEXT CF_DSPBITMAP CF_DSPMETAFILEPICT CF_DSPENHMETAFILE""".split() format_name_map = {} for f in formats: val = getattr(win32con, f) format_name_map[val]=f tymeds = [attr for attr in pythoncom.__dict__.keys() if attr.startswith("TYMED_")] def DumpClipboard(): do = pythoncom.OleGetClipboard() print "Dumping all clipboard formats..." for fe in do.EnumFormatEtc(): fmt, td, aspect, index, tymed = fe tymeds_this = [getattr(pythoncom, t) for t in tymeds if tymed & getattr(pythoncom, t)] print "Clipboard format", format_name_map.get(fmt,str(fmt)) for t_this in tymeds_this: # As we are enumerating there should be no need to call # QueryGetData, but we do anyway! fetc_query = fmt, td, aspect, index, t_this try: do.QueryGetData(fetc_query) except pythoncom.com_error: print "Eeek - QGD indicated failure for tymed", t_this # now actually get it. medium = do.GetData(fetc_query) if medium.tymed==pythoncom.TYMED_GDI: data = "GDI handle %d" % medium.data elif medium.tymed==pythoncom.TYMED_MFPICT: data = "METAFILE handle %d" % medium.data elif medium.tymed==pythoncom.TYMED_ENHMF: data = "ENHMETAFILE handle %d" % medium.data elif medium.tymed==pythoncom.TYMED_HGLOBAL: data = "%d bytes via HGLOBAL" % len(medium.data) elif medium.tymed==pythoncom.TYMED_FILE: data = "filename '%s'" % data elif medium.tymed==pythoncom.TYMED_ISTREAM: stream = medium.data stream.Seek(0,0) bytes = 0 while 1: chunk = stream.Read(4096) if not chunk: break bytes += len(chunk) data = "%d bytes via IStream" % bytes elif medium.tymed==pythoncom.TYMED_ISTORAGE: data = "a IStorage" else: data = "*** unknown tymed!" print " -> got", data do = None if __name__=='__main__': DumpClipboard() if pythoncom._GetInterfaceCount()+pythoncom._GetGatewayCount(): print "XXX - Leaving with %d/%d COM objects alive" % \ (pythoncom._GetInterfaceCount(), pythoncom._GetGatewayCount()) |