AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Zugriff auf Freigaben über "Verbindung mit ..."-Dialog
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Freigaben über "Verbindung mit ..."-Dialog

Ein Thema von ringli · begonnen am 10. Jan 2008 · letzter Beitrag vom 13. Mär 2008
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
510 Beiträge
 
Delphi 11 Alexandria
 
#1

Zugriff auf Freigaben über "Verbindung mit ..."-Di

  Alt 10. Jan 2008, 12:03
Ihr kennt doch sicherlich den Dialog "Verbindung mit ... herstellen" der erscheint wenn man bspw. auf eine administrative Freigabe (z.B. \\server\c$) zugreifen möchte. In diesem kann dann die Anmeldedaten für die entsprechende Netzwerkressource eingeben. Aufrufen kann man diesen Dialog über die Funktion SHValidateUNC was grundsätzlich auch klappt.

Jetzt zum Problem:
Wenn man der Funktion bei fConnect 0 übergibt erscheint der Dialog zwar, aber nur wenn man sich in einem einfachen Netzwerk mit Arbeitsgruppe befindet. Befinden sich der PC und der Server aber in einer Domäne, erscheint der Dialog nicht. Erst wenn ich fConnect VALIDATEUNC_CONNECT übergebe erscheint der Dialog. Leider wird dann aber ein Laufwerksbuchstabe mit der Freigabe verbunden was natürlich nicht so sein soll.
Delphi-Quellcode:
const
  SHELL32_DLL : String = 'SHELL32.DLL';

const
  VALIDATEUNC_CONNECT = $0001; // Connect a drive letter.
  VALIDATEUNC_NOUI = $0002; // On either failure or success, display no UI.
  VALIDATEUNC_PRINT = $0004; // Validate as a print share rather than disk share.
  VALIDATEUNC_VALID = $0007; // Mask value used to verify that the flags passed to SHValidateUNC are valid.

type
  TSHValidateUNC = function(hwndOwner : HWnd;
                            szFile : LPWSTR;
                            fConnect : Cardinal) : Boolean; Stdcall;
                     
                     
procedure TForm2.Button1Click(Sender: TObject);
var
  DLL_Handle : THandle;
  DLL_SHValidateUNC : TSHValidateUNC;
  ShareWdStr : WideString;
  ShareWdChr : PWideChar;
begin
  // Handle für die SHELL32.DLL erhalten
  DLL_Handle := LoadLibrary(PChar(SHELL32_DLL));
  // Wenn Handle vorhanden, Adressen der Funktionen ermitteln
  if DLL_Handle <> 0 then
    begin
      // Adressen ermitteln
      @DLL_SHValidateUNC := GetProcAddress(DLL_Handle, PChar('SHValidateUNC'));
      // Wurde SHValidateUNC in der DLL gefunden?
      if @DLL_SHValidateUNC <> nil then
        begin
          //String in PWideChar konvertieren
          ShareWdStr := Edit1.Text; // z.B. \\server\c$
          ShareWdChr := PWideChar(ShareWdStr);
          // Jetzt Dialog aufrufen
          if DLL_SHValidateUNC(Application.Handle,
                               ShareWdChr,
                               {0} VALIDATEUNC_CONNECT) then
            begin
              showmessage('SHValidateUNC war erfolgreich');
            end
          else
            begin
              showmessage('Fehler beim Aufruf von SHValidateUNC' + #13#10 +
                    '#' + IntToStr(GetLastError));
            end;
        end;
      FreeLibrary(DLL_Handle);
    end
  else
    begin
      showmessage(SHELL32_DLL + ' konnte nicht geladen werden');
    end;
end;
Jetzt zur Frage:
Wenn ich unter Start --> Ausführen \\server\c$ eintippe erscheint der "Verbindung mit ... herstellen"-Dialog, egal ob ich mich in einer Arbeitsgruppe oder Domäne befinde. Mit meinem Code funktioniert es ja nur unter den bereits beschriebenen Umständen mit dem unerwünswchten Nebeneffekt (Netzlaufwerk wird verbunden). Was macht Windows hier anders bzw. was muss ich tun um den Dialog zu Gesicht zu bekommen unabhängig davon ob ich mich in einer Arbeitsgruppe oder Domäne befinde?

P.S. Ich hoffe das ich im richtigen Unterforum bin, da das Thema eigentlich sowohl hierher als auch nach Windows-API passen würde. Ansonsten bitte verschieben.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
510 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriff auf Freigaben über "Verbindung mit ..."

  Alt 11. Jan 2008, 18:34
Hmmm... keiner eine Idee?
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
510 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Zugriff auf Freigaben über "Verbindung mit ..."

  Alt 8. Feb 2008, 14:52
Hat denn keiner eine Idee wie das funktionieren könnte?
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
510 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zugriff auf Freigaben über "Verbindung mit ..."

  Alt 13. Mär 2008, 18:56
So, ich habe die Lösung gefunden. SHValidateUNC ist der falsche Weg. Stattdessen braucht man einfach nur WNetAddConnection3 mit dem dwFlag CONNECT_INTERACTIVE.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz