![]() |
Zugriff auf Freigaben über "Verbindung mit ..."-Di
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:
Jetzt zur Frage:
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; 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. |
Re: Zugriff auf Freigaben über "Verbindung mit ..."
Hmmm... keiner eine Idee? :cry:
|
Re: Zugriff auf Freigaben über "Verbindung mit ..."
Hat denn keiner eine Idee wie das funktionieren könnte? :cry:
|
Re: Zugriff auf Freigaben über "Verbindung mit ..."
So, ich habe die Lösung gefunden. SHValidateUNC ist der falsche Weg. Stattdessen braucht man einfach nur WNetAddConnection3 mit dem dwFlag CONNECT_INTERACTIVE. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr. |
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