Как получить уведомление о событии в элементе управления ActiveX ATL, когда указанное значение реестра изменяется для использования в качестве элемента управления ActiveX для Windows Mobile - PullRequest
0 голосов
/ 06 октября 2011

У меня есть элемент управления Activex, который отображается в элементе управления веб-браузера на устройстве Windows Mobile с помощью приложения форм C #.

Элемент управления Activex работает.Я хочу добавить функцию в элемент управления activex, когда в элементе управления activex возникает событие, когда значение реестра изменяет состояние.

Я реализовал ту же (но в обратном порядке) функциональность на стороне форм, используя RegistryState сследующий кодС этим кодом мое приложение .net формы получает уведомление при изменении значения реестра.Код форм приведен ниже.

private void TestContainer_Load(object sender, EventArgs e)
{
    RegistryKey rk = Registry.LocalMachine.OpenSubKey("MyKey");
    state = new RegistryState("HKEY_LOCAL_MACHINE\\MyKey", "MessageToHostForm");
    state.Changed += new ChangeEventHandler(state_Changed);
}

void state_Changed(object sender, ChangeEventArgs args)
{
    RegistryKey rk = Registry.LocalMachine.OpenSubKey("MyKey");

    if (rk == null)
    {
        // No value available in the created/opened subkey
    }
    else
    {
        string strOut = (string)rk.GetValue("MessageToHostForm");
        button3.Text = strOut;
        rk.Close();
    }
}

Я хотел бы создать такую ​​же функциональность в элементе управления ActiveX, когда событие в элементе управления запускается при изменении значения реестра.

Проблема ... из того, что я могу сказать ... Registry.State недоступен в приложении ATL C ++: (

Как я могу заставить свой элемент управления ActiveX ATL реагировать на измененияв значениях реестра. (Я не хочу использовать опрос)

Это возможно?

Спасибо, что хотя бы прочитали это ... Давно я знаю ...

1 Ответ

0 голосов
/ 06 октября 2011

Чтобы избежать опроса, вы можете использовать CRegKey :: NotifyChangeKeyValue , который в свою очередь построен поверх RegNotifyChangeKeyValue.Вы можете сообщить о событии под ключом.Таким образом, ваш рабочий поток может ожидать этого события [возможно, среди прочих], и как только ваше ожидание будет удовлетворено, вы будете делать то, что вы делаете в вашем state_Changed выше.

У вас также есть пример кода: http://msdn.microsoft.com/en-us/library/ms724892%28VS.85%29.aspx

UPD.Я понял, что мобильная платформа под вопросом - там все несколько иначе, но все же у вас есть опция, основанная на событиях:

...