49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
|
import sys, string
|
||
|
import traceback
|
||
|
from win32com.axdebug import axdebug
|
||
|
from win32com.client.util import Enumerator
|
||
|
import pythoncom
|
||
|
|
||
|
def DumpDebugApplicationNode(node, level = 0):
|
||
|
# Recursive dump of a DebugApplicationNode
|
||
|
spacer = " " * level
|
||
|
for desc, attr in [("Node Name", axdebug.DOCUMENTNAMETYPE_APPNODE),
|
||
|
("Title", axdebug.DOCUMENTNAMETYPE_TITLE),
|
||
|
("Filename", axdebug.DOCUMENTNAMETYPE_FILE_TAIL),
|
||
|
("URL", axdebug.DOCUMENTNAMETYPE_URL),
|
||
|
]:
|
||
|
try:
|
||
|
info = node.GetName(attr)
|
||
|
except pythoncom.com_error:
|
||
|
info = "<N/A>"
|
||
|
print("%s%s: %s" % (spacer, desc, info))
|
||
|
try:
|
||
|
doc = node.GetDocument()
|
||
|
except pythoncom.com_error:
|
||
|
doc = None
|
||
|
if doc:
|
||
|
doctext = doc.QueryInterface(axdebug.IID_IDebugDocumentText)
|
||
|
numLines, numChars = doctext.GetSize()
|
||
|
# text, attr = doctext.GetText(0, 20, 1)
|
||
|
text, attr = doctext.GetText(0, numChars, 1)
|
||
|
print("%sText is %s, %d bytes long" % (spacer, repr(text[:40]+"..."), len(text)))
|
||
|
else:
|
||
|
print("%s%s" % (spacer, "<No document available>"))
|
||
|
|
||
|
for child in Enumerator(node.EnumChildren()):
|
||
|
DumpDebugApplicationNode(child, level+1)
|
||
|
|
||
|
def dumpall():
|
||
|
dm=pythoncom.CoCreateInstance(axdebug.CLSID_MachineDebugManager,None,pythoncom.CLSCTX_ALL, axdebug.IID_IMachineDebugManager)
|
||
|
e=Enumerator(dm.EnumApplications())
|
||
|
for app in e:
|
||
|
print("Application: %s" % app.GetName())
|
||
|
node = app.GetRootNode() # of type PyIDebugApplicationNode->PyIDebugDocumentProvider->PyIDebugDocumentInfo
|
||
|
DumpDebugApplicationNode(node)
|
||
|
|
||
|
if __name__=='__main__':
|
||
|
try:
|
||
|
dumpall()
|
||
|
except:
|
||
|
traceback.print_exc()
|