12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # 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()
|