Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Netzwerkkennwort dialog anzeigen (https://www.delphipraxis.net/25372-netzwerkkennwort-dialog-anzeigen.html)

kiar 11. Jul 2004 12:06

Re: Netzwerkkennwort dialog anzeigen
 
hallo nico,

könntest du nicht öfter langeweile haben :?: :mrgreen:

raik

NicoDE 11. Jul 2004 12:12

Re: Netzwerkkennwort dialog anzeigen
 
Zitat:

Zitat von kiar
könntest du nicht öfter langeweile haben :?: :mrgreen:

OT: Was kann ich dafür, wenn C-Compiler so lange brauchen ;)
Und irgendjemand muss da nochmal durch und die Parameter auf var/out/const (in/out/optional) überprüfen und eventuell Wrapper schreiben damit das Programm auf älteren Windows-Versionen noch startet...

DaFox 11. Jul 2004 12:33

Re: Netzwerkkennwort dialog anzeigen
 
Nico, klasse!! Wieder was gelernt.
Aber was machst bei Windows < XP?

Gruß,
Markus

PS: Den Dialog hab' ich als Resource nur in WinInet.dll gefunden...

SleepyMaster 11. Jul 2004 14:07

Re: Netzwerkkennwort dialog anzeigen
 
Jo! Super 1000 Dank! Echt spitze!

NicoDE 11. Jul 2004 16:09

Re: Netzwerkkennwort dialog anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DaFox
Aber was machst bei Windows < XP?

Keine Ahnung.
Ich kenne in der Richtung nur noch den 'Xxx auswählen'-Dialog (die objsel.dll ruft den 'Netzwerkkennwort eingeben'-Dialog auf... vielleicht gibt's ja ein Flag um das selbst anzeigen zu lassen... MSDN/Google/Mathias).
Delphi-Quellcode:
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;

MathiasSimmack 11. Jul 2004 16:19

Re: Netzwerkkennwort dialog anzeigen
 
Zitat:

Zitat von NicoDE
vielleicht gibt's ja ein Flag um das selbst anzeigen zu lassen... MSDN/Google/Mathias).

Erst bin ich ein Google-Suchbegriff (@DaFox: ;)), jetzt ein Flag. :shock:

NicoDE 11. Jul 2004 16:22

Re: Netzwerkkennwort dialog anzeigen
 
Zitat:

Zitat von MathiasSimmack
Erst bin ich ein Google-Suchbegriff (@DaFox: ;)), jetzt ein Flag. :shock:

War nicht böse gemeint, aber bei solch einem Flag-Monster wie dem Objektauswahl-Dialog, musste ich unweigerlich an die undokumentierten Shell-Fnktionen denken :)

topic: der 'Netzwerkkennwort eingeben'-Dialog kommt wahrscheinlich wenn versucht wird Objekte von anderen Rechnern (mit o.g. Funktion) anzeigen zu lassen - damit herumzuspielen überlasse ich dem geneigten Entwickler :)

MathiasSimmack 11. Jul 2004 16:52

Re: Netzwerkkennwort dialog anzeigen
 
Ich hab´s auch nicht böse aufgefasst. Ich musste nur daran denken, dass es Leute gibt, die meinen Namen in Suchmaschinen eintippen ... und DaFox meinte, er stolpert dann in seinen Log-Files drüber. :? Was wollen diese Leute erfahren? Und warum fragen sie nicht einfach mich?

Abgesehen davon hast du mich erwischt. Undokumentierte API-Funktionen haben mich schon immer interessiert. ;)

DaFox 11. Jul 2004 17:37

Re: Netzwerkkennwort dialog anzeigen
 
Hi Mathias!

Zitat:

Zitat von MathiasSimmack
Was wollen diese Leute erfahren?

Deine Maße, deine Essgewohnheiten oder evtl. das Buch, das Du Dir nachts unters Kissen legst?! :mrgreen: I don't know...
Ich würde es einfach als Anerkennung Deiner guten Arbeit ansehen.

Gruß,
Markus

NicoDE 11. Jul 2004 17:54

Re: Netzwerkkennwort dialog anzeigen
 
Zitat:

Zitat von MathiasSimmack
Abgesehen davon hast du mich erwischt. Undokumentierte API-Funktionen haben mich schon immer interessiert. ;)

Nunja, die ist aber nicht undokumentiert... :D

TOPIC: Nach einem Blick auf CPasswordDialog (objsel.dll) sieht es erstmal so aus als ob man den nicht direkt aufrufen kann. Er wird anscheinend nur von den internen Klassen CBindInfo und CServerInfo (AskForCredsViaSendMessage/AskForCredsViaPostMessage) aufgerufen. Und das scheint nur der Falle zu sein, falls man den Objektauswahl-Dialog (s.o.) aufruft um Objekte von anderen Systemen abzufragen...

...bleibt also die Frage was Du vorher gemacht hast um diesen Dialog zu sehen (und ob Du nur den Passwort-Dialog anzeigen willst - dann halt nur ab WinXP mit Angabe eines ähnlichen Textes wie CPasswordDialog (s.w.o)).


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz