/// <summary>Returns the info structure for dialog display settings.</summary> /// <param name="owner">The System.Windows.Forms.IWin32Window the dialog will display in front of.</param> private CREDUI.INFO GetInfo(IWin32Window owner) { CREDUI.INFO info = new CREDUI.INFO(); if (owner != null) { info.hwndParent = owner.Handle; } info.pszCaptionText = this.Caption; info.pszMessageText = this.Message; if (this.Banner != null) { info.hbmBanner = new Bitmap(this.Banner, ValidBannerWidth, ValidBannerHeight).GetHbitmap(); } info.cbSize = Marshal.SizeOf(info); return(info); }
/// <summary>Returns a DialogResult indicating the user action.</summary> /// <param name="owner">The System.Windows.Forms.IWin32Window the dialog will display in front of.</param> /// <remarks> /// Sets the name, password and SaveChecked accessors to the state of the dialog as it was dismissed by the user. /// </remarks> private DialogResult ShowDialog(IWin32Window owner) { // set the api call parameters StringBuilder name = new StringBuilder(CREDUI.MAX_USERNAME_LENGTH); name.Append(this.Name); StringBuilder password = new StringBuilder(CREDUI.MAX_PASSWORD_LENGTH); password.Append(this.Password); int saveChecked = Convert.ToInt32(this.SaveChecked); CREDUI.INFO info = GetInfo(owner); CREDUI.FLAGS flags = GetFlags(); // make the api call CREDUI.ReturnCodes code = CREDUI.PromptForCredentials( ref info, this.Target, IntPtr.Zero, 0, name, CREDUI.MAX_USERNAME_LENGTH, password, CREDUI.MAX_PASSWORD_LENGTH, ref saveChecked, flags ); // clean up resources if (this.Banner != null) { GDI32.DeleteObject(info.hbmBanner); } // set the accessors from the api call parameters this.Name = name.ToString(); this.Password = password.ToString(); this.SaveChecked = Convert.ToBoolean(saveChecked); return(GetDialogResult(code)); }