Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CredUIPromptForWindowsCredentials - Dialog Position ändern (https://www.delphipraxis.net/159175-creduipromptforwindowscredentials-dialog-position-aendern.html)

taveuni 17. Mär 2011 09:15

CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Hallo zusammen,

Ich benutze in einer Applikation CredUIPromptForWindowsCredentials
um einen Login Dialog anzuzeigen und die Windows Credentials zu prüfen.
Der Dialog erscheint im Screencenter was in diesem Fall ungünstig ist.

Da der Dialog Modal erzeugt wird habe ich keine Möglichkeit diesen danach zu verschieben.
Auch im Funktionsaufruf sehe ich keine Möglichkeit die Koordinaten mitzugeben.

Hat da jemand eine Idee?

Gruss Werner

WM_CLOSE 17. Mär 2011 09:41

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
1. mit findwindow das Fenster suchen
2. mit SetWindowPos die Koordinaten ändern

taveuni 17. Mär 2011 10:41

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Hallo WM_ClOSE,

Ich versuchte im Ausgangspost darzulegen das dies eben leider nicht möglich ist.
Denn: Der WinApi Aufruf 'CredUIPromptForCredentialsW' (stdcall; external 'Credui.dll')
ist eine Funktion welche das Modale Fenster mit Parametern erzeugt.

Wo und wann soll ich also hier das Fenster verschieben?

Delphi-Quellcode:
// mit diesem Aufruf wird der Dialog Modal angezeigt.
Result := CredUIPromptForCredentialsW(@UIInfo, PWideChar(Server), 0, 0, PWideChar(User),
          CREDUI_MAX_USERNAME_LENGTH * 2, PWideChar(PW), CREDUI_MAX_PASSWORD_LENGTH * 2, Save, Flags);
// Hier ist er wieder weg

Luckie 17. Mär 2011 10:48

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Logischer weise in einem zweiten Thread, der durch das Fenster nicht blockiert wird.

WM_CLOSE 17. Mär 2011 10:59

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Du musst das ganze also asynchron machen:
entweder mit BeginThread:
Delphi-Quellcode:
procedure SetPos(param:Pointer);
begin
  Auf Dialog warten; //vllt mit while warten, bis dialog mit findwindow zu finden ist.
  Findwindow(...);
  SetWindowPos(...);
end;

procedure TDeineKlasse.DeineMethode;
begin
  ...
  BeginThread(nil, 0,@SetPos, Pointer(XKoordinate),0, cTemp);
  deindialog;
  ...
end;
oder mit TThread;

enn das auch nicht geht, dann sorry!

//redbox im urlaub?

taveuni 17. Mär 2011 12:04

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Ach soo...

Stimmt. Ich werd's mal versuchen.

Edit:
Habs versucht und klappt einwandfrei.
Danke Euch beiden!

Dezipaitor 17. Mär 2011 14:04

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Nur zur Info:
Man sollte einen Passwortdialog für Benutzerdaten auf einem eigenen Desktop anzeigen. Aber ich weiß, dass es viel Aufwand ist und MS mal so eine Funktion von sich aus anbieten sollte.
Zumindest lässt sich so Schadsoftware unter dem aktuellen Benutzer überlisten.

himitsu 14. Feb 2024 17:26

AW: CredUIPromptForWindowsCredentials - Dialog Position ändern
 
Zitat:

Zitat von Dezipaitor (Beitrag 1089262)
Nur zur Info:
Man sollte einen Passwortdialog für Benutzerdaten auf einem eigenen Desktop anzeigen.

Das MSDN-Library durchsuchenCredUIPromptForCredentials (Post #5) sollte man nach Möglichkeit nicht mehr verwenden.
Aber das urspünglich genannte MSDN-Library durchsuchenCredUIPromptForWindowsCredentials (Post #1) hat dafür einen Parameter MSDN-Library durchsuchenCREDUIWIN_SECURE_PROMPT.

Allerdings ist er nur "benutzbar", wenn man auch einen richtigen CredentialProvider verwendet. Also nicht CREDUIWIN_GENERIC, sondern z.B. aus CertSelectionGetSerializedBlob.
Wenn doch, dann geht der Dialog nicht direkt auf, sondern erstmal ein Vordialog "Willst du das Passwortfenster öffnen?", bei OK dann "Drücke Strg+Alt+Entf um in den sicheren Bereich zu gelangen" und danach kommt erst der Dialog im neuen Sicherheits-Desktop (Wählt man dort dann abbrechen, muß man im ursprünglichen Vordialog dann auch nochmal manuell Abbrechen wählen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 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