File size: 1,583 Bytes
10865e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Dump lots of info about BITS jobs.
import pythoncom
from win32com.bits import bits

states = dict(
    [
        (val, (name[13:]))
        for name, val in vars(bits).items()
        if name.startswith("BG_JOB_STATE_")
    ]
)

job_types = dict(
    [
        (val, (name[12:]))
        for name, val in vars(bits).items()
        if name.startswith("BG_JOB_TYPE_")
    ]
)

bcm = pythoncom.CoCreateInstance(
    bits.CLSID_BackgroundCopyManager,
    None,
    pythoncom.CLSCTX_LOCAL_SERVER,
    bits.IID_IBackgroundCopyManager,
)

try:
    enum = bcm.EnumJobs(bits.BG_JOB_ENUM_ALL_USERS)
except pythoncom.error:
    print("Failed to get jobs for all users - trying for current user")
    enum = bcm.EnumJobs(0)

for job in enum:
    print("Job:", job.GetDisplayName())
    print("Description:", job.GetDescription())
    print("Id:", job.GetId())
    print("State:", states.get(job.GetState()))
    print("Type:", job_types.get(job.GetType()))
    print("Owner:", job.GetOwner())
    print("Errors:", job.GetErrorCount())
    print("Created/Modified/Finished times:", [str(t) for t in job.GetTimes()])
    bytes_tot, bytes_xf, files_tot, files_xf = job.GetProgress()
    print("Bytes: %d complete of %d total" % (bytes_xf, bytes_tot))
    print("Files: %d complete of %d total" % (files_xf, files_tot))
    for f in job.EnumFiles():
        bytes, total, done = f.GetProgress()
        print("  Remote:", f.GetRemoteName())
        print("  Local:", f.GetLocalName())
        print("  Progress: %d of %d bytes - completed=%s)" % (bytes, total, done))
        print()
    print()