59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
|
# A demo for the IDsObjectPicker interface.
|
||
|
import win32clipboard
|
||
|
import pythoncom
|
||
|
from win32com.adsi import adsi
|
||
|
from win32com.adsi.adsicon import *
|
||
|
|
||
|
cf_objectpicker = win32clipboard.RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST)
|
||
|
|
||
|
def main():
|
||
|
hwnd = 0
|
||
|
|
||
|
# Create an instance of the object picker.
|
||
|
picker = pythoncom.CoCreateInstance(adsi.CLSID_DsObjectPicker,
|
||
|
None,
|
||
|
pythoncom.CLSCTX_INPROC_SERVER,
|
||
|
adsi.IID_IDsObjectPicker)
|
||
|
|
||
|
# Create our scope init info.
|
||
|
siis = adsi.DSOP_SCOPE_INIT_INFOs(1)
|
||
|
sii = siis[0]
|
||
|
|
||
|
# Combine multiple scope types in a single array entry.
|
||
|
|
||
|
sii.type = DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN | \
|
||
|
DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN
|
||
|
|
||
|
# Set uplevel and downlevel filters to include only computer objects.
|
||
|
# Uplevel filters apply to both mixed and native modes.
|
||
|
# Notice that the uplevel and downlevel flags are different.
|
||
|
|
||
|
sii.filterFlags.uplevel.bothModes = DSOP_FILTER_COMPUTERS
|
||
|
sii.filterFlags.downlevel = DSOP_DOWNLEVEL_FILTER_COMPUTERS
|
||
|
|
||
|
# Initialize the interface.
|
||
|
picker.Initialize(
|
||
|
None, # Target is the local computer.
|
||
|
siis, # scope infos
|
||
|
DSOP_FLAG_MULTISELECT, # options
|
||
|
('objectGUID','displayName') ) # attributes to fetch
|
||
|
|
||
|
do = picker.InvokeDialog(hwnd)
|
||
|
# Extract the data from the IDataObject.
|
||
|
format_etc = (cf_objectpicker, None,
|
||
|
pythoncom.DVASPECT_CONTENT, -1,
|
||
|
pythoncom.TYMED_HGLOBAL)
|
||
|
medium = do.GetData(format_etc)
|
||
|
data = adsi.StringAsDS_SELECTION_LIST(medium.data)
|
||
|
for item in data:
|
||
|
name, klass, adspath, upn, attrs, flags = item
|
||
|
print("Item", name)
|
||
|
print(" Class:", klass)
|
||
|
print(" AdsPath:", adspath)
|
||
|
print(" UPN:", upn)
|
||
|
print(" Attrs:", attrs)
|
||
|
print(" Flags:", flags)
|
||
|
|
||
|
if __name__=='__main__':
|
||
|
main()
|