69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
|
# 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()
|