![]() |
Netzwerkkennwort dialog anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi ihrs!
Weiß jemand wie man den Netzwerkkennwort dialog (siehe Anhang) anzeigen kann? Vielen Dank schon mal! |
Re: Netzwerkkennwort dialog anzeigen
Das wird schwierig. Ich hab mir das Ding mal mit Microsoft Spy++ und WinSight32 angeguckt, aber keine Info über das Ding bekommen. Wenn man wüsste, in welcher dll das steckt...
|
Re: Netzwerkkennwort dialog anzeigen
Moin SleepyMaster,
grundsätzlich könntest Du dafür doch selber einen Dialog mit zwei Eingabefeldern erstellen. |
Re: Netzwerkkennwort dialog anzeigen
@Christian: Ja, eigendlich schon. Aber ich finde es eigendlich schon besser, wnn da wo man die Windows Standart Dialoge verwenden kann, man sie auch verwendet, und nicht das selbe nochmal programmiert.
@Stevie: Wo bekommt man WinSight32 her? @All: Weiß jemand ne Lösung??? :lol: |
Re: Netzwerkkennwort dialog anzeigen
Zitat:
|
Re: Netzwerkkennwort dialog anzeigen
Zitat:
Könnte evtl. das sein, was du brauchst. :wink: |
Re: Netzwerkkennwort dialog anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
@Stevie: Danke
@shmia: Leider kann man damit nur den "Netzlaufwerk verbinden" dialog erstellen (siehe Anhang) Falls jemand den Code braucht:
Delphi-Quellcode:
@All: Kennt jemand nen anderen Lösungsansatz? :lol:
procedure TForm1.Button1Click(Sender: TObject);
var CDS: TConnectDlgStruct; begin CDS.cbStructure := sizeof(TConnectDlgStruct); CDS.hwndOwner := Handle; CDS.lpConnRes := AllocMem(sizeof(TNetResourceA)); CDS.lpConnRes^.dwType := RESOURCETYPE_DISK; CDS.dwFlags := 0; WNetConnectionDialog1(CDS); FreeMem(CDS.lpConnRes); end; [EDIT]Speicher wieder freigegeben[/EDIT] |
Re: Netzwerkkennwort dialog anzeigen
Zitat:
|
Re: Netzwerkkennwort dialog anzeigen
Doch! Stimmt!
|
Re: Netzwerkkennwort dialog anzeigen
[PUSH]Weiß jemand wie man den Netzwerkkennwort dialog anzeigen kann?[/PUSH]
|
Re: Netzwerkkennwort dialog anzeigen
*prust*
Ich hab mit diesem Dialog schon mal gearbeitet. Ist allerdings schon etwas her, daher kann ich eigentlich nur sagen wie man in Win9x/ME diesen Dialog hervorzaubern kann. Ich denke in XP wird es genau so gehen, müsste ich aber erst testen. Die Dialogbox versteckt sich in der mpr.dll und wird über deren Funktion "PwdChangePassword" aktiviert.
Code:
GVT
HINSTANCE hmpr=::LoadLibrary("MPR.DLL");
typedef VOID (WINAPI *PWDCHANGEPASSWORD)(LPCSTR lpcRegkeyname,HWND hwnd,UINT uiReserved1,UINT uiReserved2); PWDCHANGEPASSWORD PwdChangePassword=(PWDCHANGEPASSWORD)::GetProcAddress(hmpr,"PwdChangePasswordA"); |
Re: Netzwerkkennwort dialog anzeigen
Hi Shir Khan!
Leider hab ich es nicht geschafft deinen Code von ???was?ist?das?eigentlich??? nach !!!DELPHI!!! zu übersetzen:
Delphi-Quellcode:
Die Addresse von PwdChangePasswordA wird erst garnicht gefunden.
type
TPwdChangePassword = procedure(lpcRegkeyname: LPCSTR; hwnd:HWND; uiReserved1, uiReserved2: UINT); var hDLL: THandle; p: pointer; begin hDLL:=LoadLibrary('MPR.DLL'); if hDLL <> INVALID_HANDLE_VALUE then begin p := GetProcAddress(hDLL, 'PwdChangePasswordA'); if p <> nil then begin TPwdChangePassword(p)('Hallo' ,Handle,0,0); end; end; Genauso wie in der MSDN nix über PwdChangePasswordA steht. @All: Gubt es überhaupt eine Lösung dafür??? |
Re: Netzwerkkennwort dialog anzeigen
In der DLL unter 2000 ist auch keine Fuznktion exportiert, die obiger auch nur ähnlich ist.
|
Re: Netzwerkkennwort dialog anzeigen
Hi,
vielleicht zwei Hinweise: 1. stdcall vergessen! ;-) 2. PwdChangePassword() und VerifyScreenSavePwd() sind in der mpr.dll IMHO nur unter Win9x/ME verfügbar. Gruß, Markus |
Re: Netzwerkkennwort dialog anzeigen
OK! Gibt es eine andere Löusng? Oder existiert der Netzwerkkennwort dialog garnicht in einer DLL???
|
Re: Netzwerkkennwort dialog anzeigen
Hi,
Zitat:
Delphi-Quellcode:
Gruß,
procedure TForm1.Button1Click(Sender: TObject);
var hInet: hInternet; hConn: hInternet; hReq: hInternet; begin hInet := InternetOpen('SleepyMaster''s Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil,0 ); hConn := InternetConnect(hInet, "'host einfügen'", INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0); hReq := HttpOpenRequest(hConn, 'GET', "'pfad einfügen'", 'HTTP/1.0', nil, nil, 0, 0); if HttpSendRequest(hReq, nil, 0, nil, 0) then begin InternetErrorDlg(Handle, hReq, ERROR_INTERNET_INCORRECT_PASSWORD, FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, Pointer(nil^)); end; if assigned(hConn) then InternetCloseHandle(hConn); if assigned(hReq) then InternetCloseHandle(hReq); if assigned(hInet) then InternetCloseHandle(hInet); end; Markus |
Re: Netzwerkkennwort dialog anzeigen
@DaFox: Sorry! Aber was ich suche ist ein dialog der so aussieht:
![]() |
Re: Netzwerkkennwort dialog anzeigen
Okay, sorry. Diesen Dialog gibt es bei Win2000 nicht bzw. er hat eben ein anderes Aussehen aber den selben Zweck und Inhalt. Ich habe gehofft, dass das zu WinXP nicht verändert wurde.
Darf ich fragen welcher Dialog bei Dir angezeigt wird, wenn Du den obigen Code benutzt? Gruß, Markus |
Re: Netzwerkkennwort dialog anzeigen
Es gibt etliche Versionen des Dialogs. Der Dialog auf dem Screenshot stammt von einem Aufruf von
![]() |
Re: Netzwerkkennwort dialog anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Beispielaufruf könnte so aussehen:
Delphi-Quellcode:
Im Anhang gibt's die benötigte Unit WinCred.pas (frag nich, hatte gerade Langweile ;))
uses
WinCred; resourcestring MessageText = 'Geben Sie Namen und Kennwort eines Kontos mit ' + 'Berechtigungen für %s ein.'#13#10#13#10 + 'Beispiel: benutzername oder domäne\benutzername'; CaptionText = 'Netzwerkkennwort eingeben'; procedure TForm1.Button1Click(Sender: TObject); const TargetName = 'Blindschacht'; var UserName: array [0..CRED_MAX_USERNAME_LENGTH] of Char; Password: array [0..CREDUI_MAX_PASSWORD_LENGTH] of Char; Info: TCredUIInfo; Save: BOOL; Flag: DWORD; begin ZeroMemory(@UserName, SizeOf(UserName)); ZeroMemory(@Password, SizeOf(Password)); ZeroMemory(@Info, SizeOf(TCredUIInfo)); with Info do begin cbSize := SizeOf(TCredUIInfo); hwndParent := Handle; pszMessageText := PChar(Format(MessageText, [TargetName])); pszCaptionText := PChar(CaptionText); end; Save := False; Flag := CREDUI_FLAGS_DO_NOT_PERSIST or CREDUI_FLAGS_EXCLUDE_CERTIFICATES or CREDUI_FLAGS_GENERIC_CREDENTIALS or CREDUI_FLAGS_ALWAYS_SHOW_UI; ShowMessage(SysErrorMessage( CredUIPromptForCredentials(@Info, 'Foo', nil, 0, UserName, CRED_MAX_USERNAME_LENGTH+1, Password, CREDUI_MAX_PASSWORD_LENGTH+1, Save, Flag))); ZeroMemory(@UserName, SizeOf(UserName)); ZeroMemory(@Password, SizeOf(Password)); end; |
Re: Netzwerkkennwort dialog anzeigen
hallo nico,
könntest du nicht öfter langeweile haben :?: :mrgreen: raik |
Re: Netzwerkkennwort dialog anzeigen
Zitat:
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... |
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... |
Re: Netzwerkkennwort dialog anzeigen
Jo! Super 1000 Dank! Echt spitze!
|
Re: Netzwerkkennwort dialog anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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; |
Re: Netzwerkkennwort dialog anzeigen
Zitat:
|
Re: Netzwerkkennwort dialog anzeigen
Zitat:
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 :) |
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. ;) |
Re: Netzwerkkennwort dialog anzeigen
Hi Mathias!
Zitat:
Ich würde es einfach als Anerkennung Deiner guten Arbeit ansehen. Gruß, Markus |
Re: Netzwerkkennwort dialog anzeigen
Zitat:
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:18 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