CoInternetSetFeatureEnabled с FEATURE_BLOCK_INPUT_PROMPTS не работает

Я пытаюсь использовать CoInternetSetFeatureEnabled API для блокирования быстрый диалог поскольку это показывает ниже в применении, которое принимает контроль WebBrowser, но это не работает. Регистрация обновления не работает также, после MSDN - Интернет-средства управления особенностью (я.. L). Я использую IE9 на 64 битах Win7.

FEATURE_BLOCK_INPUT_PROMPTS Internet Explorer 7. Позвольте или отключите блокировщик всплывающих окон, чтобы показать вход вызывает диалоговые окна. Используемый блокировщик всплывающих окон снижать риск высмеивания.

private const int FEATURE_BLOCK_INPUT_PROMPTS = 27;

[DllImport("urlmon.dll")]
[PreserveSig]
[return: MarshalAs(UnmanagedType.Error)]
public static extern int CoInternetSetFeatureEnabled(
    int FeatureEntry,
    [MarshalAs(UnmanagedType.U4)] int dwFlags,
    bool fEnable);

public static int disableInputPrompts(bool state)
{
    return CoInternetSetFeatureEnabled(
       FEATURE_BLOCK_INPUT_PROMPTS, SET_FEATURE_ON_PROCESS, state);
}

Update Just have tried in WinXP with IE8 and this feature is working. Does it depends on something else?

Update According to msdn this feature is by default enabled in IE9 but it does not work. Clicking on "Try It" button in w3schools sample initiates the prompt dialog, is that a security bug?

По умолчанию эта опция активирована для Internet Explorer и отключена для заявления, принимающие Контроль WebBrowser.

Какая-либо рабочая альтернатива о том, как заблокировать быстрый диалог в контроле WebBrowser?

Это может быть сделано, осуществив таможенного менеджера безопасности IInternetSecurityManager?

2
nl ja de
код возврата 0 или S_OK
добавлено автор walter, источник
Попробованный это на IE10, это просто doesn' t больше работают.
добавлено автор Hans Passant, источник
Есть ли от требования CoInternetSetFeatureEnabled какой-либо код возврата?
добавлено автор Simon Mourier, источник

1 ответы

Единственный выбор, который я имею на данный момент, состоит в том, чтобы использовать SetWindowsHookEx и на основе Подавление принятых диалогов контроля WebBrowser образец.

internal static class WindowsInterop
{
    private const Int32 WM_COMMAND = 0x0111;
    private const Int32 WM_INITDIALOG = 0x0110;

    private const Int32 WM_SYSCOMMAND = 0x0112;
    private const Int32 SC_CLOSE = 0xF060;

    private static IntPtr _pWH_CALLWNDPROCRET = IntPtr.Zero;

    private static HookProcedureDelegate _WH_CALLWNDPROCRET_PROC =
        new HookProcedureDelegate(WindowsInterop.WH_CALLWNDPROCRET_PROC);

    [DllImport("user32.dll")]
    private static extern IntPtr SetWindowsHookEx(Int32 hooktype, 
        HookProcedureDelegate callback, IntPtr hMod, UInt32 dwThreadId);

    [DllImport("user32.dll")]
    private static extern IntPtr UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll")]
    private static extern Int32 CallNextHookEx(IntPtr hhk, Int32 nCode, 
        IntPtr wParam, IntPtr lParam);

    [DllImport("user32.dll")]
    private static extern Int32 GetWindowTextLength(IntPtr hWnd);

    [DllImport("user32.dll")]
    private static extern Int32 GetWindowText(IntPtr hWnd, 
        StringBuilder text, Int32 maxLength);

    [DllImport("user32.dll", SetLastError = false)]
    private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, 
        IntPtr wParam, IntPtr lParam);

   //Hook Types
    private const Int32 WH_CALLWNDPROCRET = 12;


    [StructLayout(LayoutKind.Sequential)]
    private struct CWPRETSTRUCT
    {
        public IntPtr lResult;
        public IntPtr lParam;
        public IntPtr wParam;
        public UInt32 message;
        public IntPtr hwnd;
    };

   //Delegate for a WH_ hook procedure
    private delegate Int32 HookProcedureDelegate(Int32 iCode, 
        IntPtr pWParam, IntPtr pLParam);

   //Delegate for the EnumChildWindows method
    private delegate Boolean EnumerateWindowDelegate(IntPtr pHwnd, IntPtr pParam);

   //Add a Hook into the CALLWNDPROCRET notification chain
    internal static void Hook()
    {
        if (WindowsInterop._pWH_CALLWNDPROCRET == IntPtr.Zero)
        {
            WindowsInterop._pWH_CALLWNDPROCRET = SetWindowsHookEx(
                WH_CALLWNDPROCRET,
                    WindowsInterop._WH_CALLWNDPROCRET_PROC,
                        IntPtr.Zero,
                            (uint)AppDomain.GetCurrentThreadId());
        }
    }

   //Remove the Hook into the CALLWNDPROCRET notification chain
    internal static void Unhook()
    {
        if (WindowsInterop._pWH_CALLWNDPROCRET != IntPtr.Zero)
        {
            UnhookWindowsHookEx(WindowsInterop._pWH_CALLWNDPROCRET);
        }
    }

   //Hook proceedure called by the OS when a message has been processed by the target Window
    private static Int32 WH_CALLWNDPROCRET_PROC(Int32 iCode, 
        IntPtr pWParam, IntPtr pLParam)
    {
        if (iCode < 0)
            return CallNextHookEx(WindowsInterop._pWH_CALLWNDPROCRET, 
                iCode, pWParam, pLParam);

        CWPRETSTRUCT cwp = (CWPRETSTRUCT)
            Marshal.PtrToStructure(pLParam, typeof(CWPRETSTRUCT));

        Console.WriteLine(cwp.message);

        if (cwp.message == WM_INITDIALOG)
        {
           //A dialog was initialised, find out what sort it was via it's Caption text
            Int32 iLength = GetWindowTextLength(cwp.hwnd);
            StringBuilder sb = new StringBuilder(iLength + 1);

            GetWindowText(cwp.hwnd, sb, sb.Capacity);
            var title = sb.ToString();
            if (String.IsNullOrEmpty(title) == false && 
                title.IndexOf("prompt", StringComparison.OrdinalIgnoreCase) >= 0)
            {
               //just close it
                SendMessage(cwp.hwnd, WM_SYSCOMMAND, new IntPtr(SC_CLOSE), IntPtr.Zero);
                return 1;
            }
        }

       //Call the next hook in the chain
        return CallNextHookEx(WindowsInterop._pWH_CALLWNDPROCRET, iCode, pWParam, pLParam);
    }
}
0
добавлено
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing