Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Windows Fenster für Benutzername und Passwort
AyrA
myCSharp.de - Member

Avatar #avatar-3186.png


Dabei seit:
Beiträge: 60
Herkunft: Schweiz

Themenstarter:

Windows Fenster für Benutzername und Passwort

beantworten | zitieren | melden

Beschreibung:

Diese klasse erlaubt es das Zugangsdatenfenster anzuzeigen, das von Windows für diverse Aufgaben selbst verwendet wird (z.B. Netzlaufwerke verbinden)

Es muss lediglich die askCred Funktion ausgeführt werden. Sie gibt True bei Erfolg zurück. False bei Misserfolg (z.B. wenn der User auf Abbrechen klickt).
Name und Passwort werden als Cleartext in die Variablen geschrieben.


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ytBackup
{

    public static class PWD
    {
        [DllImport("credui")]
        private static extern CredUIReturnCodes CredUIPromptForCredentials(ref CREDUI_INFO creditUR,string targetName,IntPtr reserved1,int iError,StringBuilder userName,int maxUserName,StringBuilder password,int maxPassword,[MarshalAs(UnmanagedType.Bool)] ref bool pfSave,CREDUI_FLAGS flags);

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        private struct CREDUI_INFO
        {
            public int cbSize;
            public IntPtr hwndParent;
            public string pszMessageText;
            public string pszCaptionText;
            public IntPtr hbmBanner;
        }
        
        [Flags]
        private enum CREDUI_FLAGS
        {
            INCORRECT_PASSWORD = 0x1,
            DO_NOT_PERSIST = 0x2,
            REQUEST_ADMINISTRATOR = 0x4,
            EXCLUDE_CERTIFICATES = 0x8,
            REQUIRE_CERTIFICATE = 0x10,
            SHOW_SAVE_CHECK_BOX = 0x40,
            ALWAYS_SHOW_UI = 0x80,
            REQUIRE_SMARTCARD = 0x100,
            PASSWORD_ONLY_OK = 0x200,
            VALIDATE_USERNAME = 0x400,
            COMPLETE_USERNAME = 0x800,
            PERSIST = 0x1000,
            SERVER_CREDENTIAL = 0x4000,
            EXPECT_CONFIRMATION = 0x20000,
            GENERIC_CREDENTIALS = 0x40000,
            USERNAME_TARGET_CREDENTIALS = 0x80000,
            KEEP_USERNAME = 0x100000,
        }

        private enum CredUIReturnCodes
        {
            NO_ERROR = 0,
            ERROR_CANCELLED = 1223,
            ERROR_NO_SUCH_LOGON_SESSION = 1312,
            ERROR_NOT_FOUND = 1168,
            ERROR_INVALID_ACCOUNT_NAME = 1315,
            ERROR_INSUFFICIENT_BUFFER = 122,
            ERROR_INVALID_PARAMETER = 87,
            ERROR_INVALID_FLAGS = 1004,
        }

        /// <summary>
        /// Fragt nach Benutzername und Passwort
        /// </summary>
        /// <param name="Title">Fenstertitel</param>
        /// <param name="Message">Fensternachricht</param>
        /// <param name="name">Benutzername</param>
        /// <param name="pass">Passwort</param>
        /// <returns>true, wenn erfolgreich</returns>
        public static bool askCred(string Title,string Message,out string name,out string pass)
        {
            // Setup the flags and variables
            StringBuilder userPassword = new StringBuilder(), userID = new StringBuilder();
            CREDUI_INFO credUI = new CREDUI_INFO();
            credUI.pszCaptionText = Title;
            credUI.pszMessageText = Message;
            credUI.cbSize = Marshal.SizeOf(credUI);
            bool save = false;
            CREDUI_FLAGS flags = CREDUI_FLAGS.ALWAYS_SHOW_UI | CREDUI_FLAGS.GENERIC_CREDENTIALS;

            // Prompt the user
            CredUIReturnCodes returnCode = CredUIPromptForCredentials(ref credUI, System.Windows.Forms.Application.ProductName, IntPtr.Zero, 0, userID, 100, userPassword, 100, ref save, flags);

            name = userID.ToString();
            pass = userPassword.ToString();

            return (returnCode == CredUIReturnCodes.NO_ERROR);
        }
    }
}

Der Screenshot zeigt das Fenster, wie es in ytBackup verwendet wird.

Schlagwörter: Windows Benutzername Passwort abfrage Dialog Fenster API
Attachments
AyrA.ch
Free Stuff

If you can read this you tried to select my Signature or have another Theme installed
private Nachricht | Beiträge des Benutzers
AyrA
myCSharp.de - Member

Avatar #avatar-3186.png


Dabei seit:
Beiträge: 60
Herkunft: Schweiz

Themenstarter:

Unicode

beantworten | zitieren | melden

Ersetzt man den Funktionsnamen CredUIPromptForCredentials mit CredUIPromptForCredentialsW können unicode Zeichen verwendet werden.
AyrA.ch
Free Stuff

If you can read this you tried to select my Signature or have another Theme installed
private Nachricht | Beiträge des Benutzers