def COMOpen(progID, events=None):
	try:
		if events == None:
			return win32com.client.Dispatch(progID)
		else:
			return win32com.client.DispatchWithEvents(progID, events)
	except:
		error.abortCheck()
		error.traceback()
		return None
示例#2
0
def COMOpen(progID, events=None):
    try:
        if events == None:
            return win32com.client.Dispatch(progID)
        else:
            return win32com.client.DispatchWithEvents(progID, events)
    except:
        error.abortCheck()
        error.traceback()
        return None
 def getFromFile(filename):
     props = docProps()
     try:
         props.fileOwner = fileOwner(filename)
     except:
         error.abortCheck()
         props.fileOwner = None
     stg = wincom.StgOpenStorage(
         filename, None, wincom.storagecon.STGM_READ
         | wincom.storagecon.STGM_SHARE_EXCLUSIVE)
     pss = stg.QueryInterface(wincom.IID_IPropertySetStorage)
     ps = pss.Open(FMTID_SummaryInformation)
     data = ps.ReadMultiple(allSummaryInformation)
     props.path = filename
     props.title = unicodeFix(data[0])
     props.author = unicodeFix(data[2])
     props.subject = unicodeFix(data[1])
     props.keywords = unicodeFix(data[3])
     props.comments = unicodeFix(data[4])
     props.template = unicodeFix(data[5])
     props.lastAuthor = unicodeFix(data[6])
     props.revNumber = unicodeFix(data[7])
     props.lastEditTime = PyTime2datetime(data[8])
     props.lastPrintedTime = PyTime2datetime(data[9])
     props.createdTime = PyTime2datetime(data[10])
     props.lastSavedTime = PyTime2datetime(data[11])
     props.pageCount = data[12]
     props.wordCount = data[13]
     props.charCount = data[14]
     props.appName = unicodeFix(data[15])
     props.docSecurity = data[16]
     try:
         ps = pss.Open(FMTID_DocSummaryInformation)
         data = ps.ReadMultiple([PIDDSI_COMPANY])
     # except pythoncom.com_err:      No workum, use plain except instead.  Sigh.
     except:
         error.abortCheck()
         error.traceback()
         data = [""]
     props.company = unicodeFix(data[0])
     return props
def processFile(entry, options):
    if entry.attributes & iolib.FILE_ATTRIBUTE_DIRECTORY:
        return
    filename = entry.path
    filename2 = filename
    tempFilename = None
    if iolib.webfile.isWebPath(filename) or iolib.zipfile.isZipPath(filename):
        tempFilename = iolib.makeTempCopy(filename)
        if tempFilename == None:
            return
        filename2 = tempFilename
    oldStdout = options.outRedirector.redirect(entry, options)
    if oldStdout == None:
        iolib.removeTempCopy(tempFilename)
        return
    if not wincom.StgIsStorageFile(filename2):
        error.signal("File %s is not a Micorosft Office document file",
                     (filename))
        iolib.removeTempCopy(tempFilename)
        return
    try:
        props = docProps.getFromFile(filename2)
        props.path = filename
    except:
        error.exception("Unable to access file %s", (filename))
        iolib.removeTempCopy(tempFilename)
        return
    try:
        revLog = wordRevLog(filename2)
    except:
        error.abortCheck()
        revLog = None
    entry.md5 = None
    if options.md5f:
        entry.md5 = md5file(filename2)
    iolib.removeTempCopy(tempFilename)
    options.outClass.showMetadata(entry, props, revLog, options)
    options.outRedirector.restore(oldStdout)
    return
	def getFromFile(filename):
		props = docProps()
		try:
			props.fileOwner = fileOwner(filename)
		except:
			error.abortCheck()
			props.fileOwner = None
		stg = wincom.StgOpenStorage(filename, None, wincom.storagecon.STGM_READ | wincom.storagecon.STGM_SHARE_EXCLUSIVE)
		pss = stg.QueryInterface(wincom.IID_IPropertySetStorage)
		ps = pss.Open(FMTID_SummaryInformation)
		data = ps.ReadMultiple(allSummaryInformation)
		props.path = filename
		props.title = unicodeFix(data[0])
		props.author = unicodeFix(data[2])
		props.subject = unicodeFix(data[1])
		props.keywords = unicodeFix(data[3])
		props.comments = unicodeFix(data[4])
		props.template = unicodeFix(data[5])
		props.lastAuthor = unicodeFix(data[6])
		props.revNumber = unicodeFix(data[7])
		props.lastEditTime = PyTime2datetime(data[8])
		props.lastPrintedTime = PyTime2datetime(data[9])
		props.createdTime = PyTime2datetime(data[10])
		props.lastSavedTime = PyTime2datetime(data[11])
		props.pageCount = data[12]
		props.wordCount = data[13]
		props.charCount = data[14]
		props.appName = unicodeFix(data[15])
		props.docSecurity = data[16]
		try:
			ps = pss.Open(FMTID_DocSummaryInformation)
			data = ps.ReadMultiple([PIDDSI_COMPANY])
		# except pythoncom.com_err:      No workum, use plain except instead.  Sigh.
		except:
			error.abortCheck()
			error.traceback()
			data = [""]
		props.company = unicodeFix(data[0])
		return props
def processFile(entry, options):
	if entry.attributes & iolib.FILE_ATTRIBUTE_DIRECTORY:
		return
	filename = entry.path
	filename2 = filename
	tempFilename = None
	if iolib.webfile.isWebPath(filename) or iolib.zipfile.isZipPath(filename):
		tempFilename = iolib.makeTempCopy(filename)
		if tempFilename == None:
			return
		filename2 = tempFilename
	oldStdout = options.outRedirector.redirect(entry, options)
	if oldStdout == None:
		iolib.removeTempCopy(tempFilename)
		return
	if not wincom.StgIsStorageFile(filename2):
		error.signal("File %s is not a Micorosft Office document file", (filename))
		iolib.removeTempCopy(tempFilename)
		return
	try:
		props = docProps.getFromFile(filename2)
		props.path = filename
	except:
		error.exception("Unable to access file %s", (filename))
		iolib.removeTempCopy(tempFilename)
		return
	try:
		revLog = wordRevLog(filename2)
	except:
		error.abortCheck()
		revLog = None
	entry.md5 = None
	if options.md5f:
		entry.md5 = md5file(filename2)
	iolib.removeTempCopy(tempFilename)
	options.outClass.showMetadata(entry, props, revLog, options)
	options.outRedirector.restore(oldStdout)
	return
def wordRevLog(filename):
    try:
        stg = wincom.StgOpenStorage(
            filename, None, wincom.storagecon.STGM_READ
            | wincom.storagecon.STGM_SHARE_EXCLUSIVE)
    except:
        error.abortCheck("Cannot open file -- %s", filename)
        return None
    try:
        stream = stg.OpenStream("WordDocument", None,
                                wincom.storagecon.STGM_SHARE_EXCLUSIVE, 0)
        contents = stream.Read(0x02DA)
        if contents == None:
            return None
    except:
        error.abortCheck()
        return None
    filehdr = BinReader(contents)
    sign = filehdr.getWord()
    if sign != WIN95_IDENT and sign != WIN97_IDENT:
        return None
    filehdr.seek(0x02D2)
    revLogOffset = filehdr.getDWord()
    revLogSize = filehdr.getDWord()
    if revLogOffset == None or revLogSize == None or revLogSize == 0:
        return None
    try:
        stream = stg.OpenStream("1Table", None,
                                wincom.storagecon.STGM_SHARE_EXCLUSIVE, 0)
        contents = stream.Read(revLogOffset + revLogSize)
        if contents == None:
            return None
    except:
        error.abortCheck()
        return None
    revLog = BinReader(contents)
    revLogTable = []
    revLog.seek(revLogOffset + 2)
    count = revLog.getDWord()
    if count == None or count == 0 or count > 20 or (count % 2) != 0:
        return None
    count = count / 2
    for i in xrange(count):
        entry = SimpleStruct()
        n = revLog.getWord()
        if n == 0 or n > 512:
            break
        entry.person = revLog.getUString(n)
        n = revLog.getWord()
        if n == 0 or n > 512:
            break
        entry.filePath = revLog.getUString(n)
        revLogTable.append(entry)
    return revLogTable
def wordRevLog(filename):
	try:
		stg = wincom.StgOpenStorage(filename, None, wincom.storagecon.STGM_READ | wincom.storagecon.STGM_SHARE_EXCLUSIVE)
	except:
		error.abortCheck("Cannot open file -- %s", filename)
		return None
	try:
		stream = stg.OpenStream("WordDocument", None, wincom.storagecon.STGM_SHARE_EXCLUSIVE, 0)
		contents = stream.Read(0x02DA);
		if contents == None:
			return None
	except:
		error.abortCheck()
		return None
	filehdr = BinReader(contents)
	sign = filehdr.getWord();
	if sign != WIN95_IDENT and sign != WIN97_IDENT:
		return None
	filehdr.seek(0x02D2)
	revLogOffset = filehdr.getDWord()
	revLogSize = filehdr.getDWord()
	if revLogOffset == None or revLogSize == None or revLogSize == 0:
		return None
	try:	
		stream = stg.OpenStream("1Table", None, wincom.storagecon.STGM_SHARE_EXCLUSIVE, 0)
		contents = stream.Read(revLogOffset + revLogSize);
		if contents == None:
			return None
	except:
		error.abortCheck()
		return None
	revLog = BinReader(contents)
	revLogTable = []
	revLog.seek(revLogOffset + 2)
	count = revLog.getDWord()
	if count == None or count == 0 or count > 20 or (count % 2) != 0:
		return None
	count = count / 2
	for i in xrange(count):
		entry = SimpleStruct()
		n = revLog.getWord()
		if n == 0 or n > 512:
			break
		entry.person = revLog.getUString(n)
		n = revLog.getWord()
		if n == 0 or n > 512:
			break
		entry.filePath = revLog.getUString(n)
		revLogTable.append(entry)
	return revLogTable