static int Show(Form owner, string title, TaskDialogCommonIcon icon, string mainInstruction, string content, TaskDialogCommonButtons commonButtons, TaskDialogButton[] buttons) { if (buttons.Length > 10) { throw new ArgumentOutOfRangeException("buttons", "Maximum number of buttons is 10."); } var tdConfig = new TaskDialogConfig(); tdConfig.Size = (uint)Marshal.SizeOf(tdConfig); Debug.Assert(tdConfig.Size == 160); tdConfig.Parent = owner.Handle; tdConfig.Instance = NativeMethods.GetModuleHandle(null); tdConfig.Flags = TaskDialogFlags.PositionRelativeToWindow | (owner.RightToLeft == RightToLeft.Yes ? TaskDialogFlags.RTLLayout : TaskDialogFlags.None); tdConfig.CommonButtons = commonButtons; tdConfig.WindowTitle = title; tdConfig.MainIcon = new IntPtr((int)icon); tdConfig.MainInstruction = mainInstruction; tdConfig.Content = content; if (buttons.Length > 0) { var buttonStructSize = Marshal.SizeOf(typeof(TaskDialogButton)); tdConfig.Buttons = Marshal.AllocHGlobal(buttonStructSize * buttons.Length); for (var i = 0; i < buttons.Length; i++) { Marshal.StructureToPtr(buttons[i], new IntPtr(tdConfig.Buttons.ToInt64() + i * buttonStructSize), false); } tdConfig.ButtonCount = (uint)buttons.Length; } try { var button = 0; var radioButton = 0; var verificationFlag = false; var rv = NativeMethods.TaskDialogIndirect(ref tdConfig, out button, out radioButton, out verificationFlag); if (rv != 0) { throw new InvalidOperationException("TaskDialogIndirect failed: " + rv.ToString("X8", CultureInfo.CurrentCulture)); } return(button); } finally { if (buttons.Length > 0) { Marshal.FreeHGlobal(tdConfig.Buttons); } } }
public static extern int TaskDialogIndirect(ref TaskDialogConfig pTaskConfig, out int pnButton, out int pnRadioButton, out bool pfVerificationFlagChecked);