Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Открыть системное диалоговое окно списка пользователей   Найти похожие ветки 

 
artdeveloper ©   (2005-08-30 17:59) [0]

Здравствуйте мастера.
Подскажите пожалуйста каким образом можно вызвать стандартное диалоговое окно выбора пользователя(ей). То самое, которое появляется при установке прав доступа к папке в системе NTFS или расшареному ресурсу.


 
BiN ©   (2005-08-30 18:17) [1]

artdeveloper ©   (30.08.05 17:59)  

Здравствуйте мастера.
Подскажите пожалуйста каким образом можно вызвать стандартное диалоговое окно выбора пользователя(ей).


Ты говоришь про два различных диалога.
Первый - для выбора объектов (групп, пользователей, компьютеров и т.п.). Для вызова этого диалога используется COM-объект IDsObjectPicker.

То самое, которое появляется при установке прав доступа к папке в системе NTFS или расшареному ресурсу

Для настройки же дескриптора безопасности защищаемых объектов, втом числе и файлов NTFS, используется ф-я EditSecurity.

Примеры знает гугль.


 
troits ©   (2005-08-30 18:27) [2]

Не это, случайно? Путь к Windows - свой .:)

rundll32.exe "D:\WINDOWS\system32\netplwiz.dll",UsersRunDll


 
artdeveloper ©   (2005-08-30 18:41) [3]

rundll32.exe "D:\WINDOWS\system32\netplwiz.dll",UsersRunDll
Спасибо, но не это...

Если несложно выложите пример использования IDsObjectPicker


 
Турист   (2005-08-30 23:32) [4]

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-31 15:45) [5]

Спасибо за пример. Работает.

Для тех кто будет использовать данный пример:
юнит ObjSel не входит в стандартную поставку Delphi. Он из пакета JEDI VCL.

Кстати в JEDI VCL есть готовый компонент для выбора объектов JvObjectPickerDialog.



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
3-1127469418
WG
2005-09-23 13:56
2005.11.06
Можно ли запретить DBGrid создавать запись ?


4-1126063936
Strech
2005-09-07 07:32
2005.11.06
Заголовочные файлы от Setupapi. lib/dll


14-1129705139
WondeRu
2005-10-19 10:58
2005.11.06
Идиотские баги известных программ...


14-1129571602
Sergey_Masloff
2005-10-17 21:53
2005.11.06
Поковырялся сегодня в исходниках Indy... мама родная


1-1129118842
dip
2005-10-12 16:07
2005.11.06
Как добраться из TComponent до свойства Visible потомков