Spaces:
Running
Running
# A demo for the IDsObjectPicker interface. | |
import pythoncom | |
import win32clipboard | |
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() | |