| Platform SDK: Active Directory, ADSI, and Directory Services |
The sample code in this topic shows the main function of a process that uses the object picker dialog box. The main function performs the following steps:
Note RegisterClipboardFormat call that registers the CFSTR_DSOP_DS_SELECTION_LIST clipboard format. RegisterClipboardFormat returns an identifier used in the IDataObject::GetData call made by the subroutine that processes the user's selections.
#include <objsel.h>
UINT g_cfDsObjectPicker =
RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST);
void _cdecl
main(int argc, char * argv[]) {
HRESULT hr = S_OK;
IDsObjectPicker *pDsObjectPicker = NULL;
IDataObject *pdo = NULL;
HWND hwndParent = NULL; // Supply a window handle to your application.
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (FAILED(hr)) return;
do {
// Create an instance of the object picker.
hr = CoCreateInstance(CLSID_DsObjectPicker,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDsObjectPicker,
(void **) &pDsObjectPicker);
if (FAILED(hr)) break;
// Initialize the object picker instance.
hr = InitObjectPicker(pDsObjectPicker);
if (FAILED(hr)) break;
// Invoke the modal dialog.
hr = pDsObjectPicker->InvokeDialog(hwndParent, &pdo);
if (FAILED(hr)) break;
if (hr == S_OK) {
ProcessSelectedObjects(pdo);
pdo->Release();
}
else if (hr == S_FALSE)
printf("User canceled object picker dialog\n");
} while (0);
pDsObjectPicker->Release();
CoUninitialize();
}