![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открыть системное диалоговое окно списка пользователей [D7, NT4, Win2k, WinXP]
artdeveloper © (2005-08-30 17:59:00)Здравствуйте мастера.
Подскажите пожалуйста каким образом можно вызвать стандартное диалоговое окно выбора пользователя(ей). То самое, которое появляется при установке прав доступа к папке в системе NTFS или расшареному ресурсу.
artdeveloper (2005-08-31 15:45:00) [1]Спасибо за пример. Работает.
Для тех кто будет использовать данный пример:
юнит ObjSel не входит в стандартную поставку Delphi. Он из пакета JEDI VCL.
Кстати в JEDI VCL есть готовый компонент для выбора объектов JvObjectPickerDialog.
Турист (2005-08-30 23:32:00) [2]http://64.233.183.104/search?q=cache:E04OB1WZJBgJ:www.delphipraxis.net/post202597.html+IDsObjectPicker+delphi&hl=ru
uses
ActiveX, ObjSel;
////////////////////////////////////////////////////////////////////////////////
//
// Test - 'Select User' dialog
//
function InitObjectPicker(Picker: IDsObjectPicker): HRESULT;
var
ScopeInit: array [0..0] of TDSOPScopeInitInfo;
InitInfo: TDSOPInitInfo;
begin
if nil = Picker then
Result := E_INVALIDARG
else
begin
ZeroMemory(@ScopeInit, SizeOf(ScopeInit));
ScopeInit[0].cbSize := SizeOf(TDSOPScopeInitInfo);
ScopeInit[0].flType := DSOP_SCOPE_TYPE_TARGET_COMPUTER;
ScopeInit[0].flScope := DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE;
ScopeInit[0].FilterFlags.Uplevel.flBothModes := DSOP_FILTER_USERS;
ScopeInit[0].FilterFlags.flDownlevel := DSOP_DOWNLEVEL_FILTER_USERS;
ZeroMemory(@InitInfo, SizeOf(InitInfo));
InitInfo.cbSize := SizeOf(InitInfo);
InitInfo.cDsScopeInfos := SizeOf(ScopeInit) div SizeOf(TDSOPScopeInitInfo);
InitInfo.aDsScopeInfos := @ScopeInit;
InitInfo.flOptions := DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK;
Result := Picker.Initialize(InitInfo);
end;
end;
function ProcessSelectedObjects(DatObj: IDataObject): HRESULT;
var
StgMed: TStgMedium;
FmtEtc: TFormatEtc;
SelLst: PDSSelectionList;
Index: ULONG;
Text: string;
begin
if nil = DatObj then
Result := E_INVALIDARG
else
begin
with FmtEtc do
begin
cfFormat := RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST);
ptd := nil;
dwAspect := DVASPECT_CONTENT;
lindex := -1;
tymed := TYMED_HGLOBAL;
end;
Result := DatObj.GetData(FmtEtc, StgMed);
if Succeeded(Result) then
begin
SelLst := PDS_SELECTION_LIST(GlobalLock(StgMed.hGlobal));
if SelLst nil then
try
Text := '';
for Index := 0 to SelLst.cItems - 1 do
begin
Text := Text + Format(
'Object : %u'#13#10 +
' Name : %s'#13#10 +
' Class: %s'#13#10 +
' Path : %s'#13#10 +
' UPN : %s'#13#10, [
Index,
WideCharToString(SelLst.aDsSelection[Index].pwzName),
WideCharToString(SelLst.aDsSelection[Index].pwzClass),
WideCharToString(SelLst.aDsSelection[Index].pwzADsPath),
WideCharToString(SelLst.aDsSelection[Index].pwzUPN)]);
end;
ShowMessage(Text);
finally
GlobalUnlock(StgMed.hGlobal);
end
else
Result := E_POINTER;
ReleaseStgMedium(StgMed);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Picker: IDsObjectPicker;
DatObj: IDataObject;
begin
if Succeeded(CoInitialize(nil)) then
try
if Succeeded(CoCreateInstance(CLSID_DsObjectPicker, nil,
CLSCTX_INPROC_SERVER, IID_IDsObjectPicker, Picker)) then
try
if Succeeded(InitObjectPicker(Picker)) then
case Picker.InvokeDialog(Self.Handle, DatObj) of
S_OK:
try
ProcessSelectedObjects(DatObj);
finally
DatObj := nil;
end;
S_FALSE:
ShowMessage('Dialog wurde vom Benutzer abgebrochen.');
end;
finally
Picker := nil;
end;
finally
CoUninitialize;
end;
end;
artdeveloper (2005-08-30 18:41:00) [3]rundll32.exe "D:\WINDOWS\system32\netplwiz.dll",UsersRunDll
Спасибо, но не это...
Если несложно выложите пример использования IDsObjectPicker
troits (2005-08-30 18:27:00) [4]Не это, случайно? Путь к Windows - свой .:)
rundll32.exe "D:\WINDOWS\system32\netplwiz.dll",UsersRunDll
BiN (2005-08-30 18:17:00) [5]artdeveloper © (30.08.05 17:59)
Здравствуйте мастера.
Подскажите пожалуйста каким образом можно вызвать стандартное диалоговое окно выбора пользователя(ей).
Ты говоришь про два различных диалога.
Первый - для выбора объектов (групп, пользователей, компьютеров и т.п.). Для вызова этого диалога используется COM-объект IDsObjectPicker.
То самое, которое появляется при установке прав доступа к папке в системе NTFS или расшареному ресурсу
Для настройки же дескриптора безопасности защищаемых объектов, втом числе и файлов NTFS, используется ф-я EditSecurity.
Примеры знает гугль.