2011-10-06 65 views
0

我有一個activex控件,該控件使用C#表單應用程序顯示在Windows Mobile設備上的webbrowser控件中。當指定的註冊表值更改爲用作Windows Mobile ActiveX控件時,如何在ATL ActiveX控件中獲取事件通知

該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++應用程序:(

我怎樣才能讓在註冊表值改變我的ATL ActiveX控件響應。 (我不想使用輪詢)

這是更多鈔票?

感謝至少閱讀這...長,我知道...

+0

OK我想我找到這將有效...我會跟進我的調查結果,以防萬一你(陌生人)有興趣看到這個鏈接http://geekswithblogs.net/BruceEitman/archive/2009/08/25/windows-ce-cereggetnotificationinfo-作品 - 排序的部分,3.aspx – WiredLessInTX

回答

0

爲了避免投票,你可以使用CRegKey::NotifyChangeKeyValue,而後者又建立在之上10。您可以通過密鑰下的更改發出事件信號。所以你的工作線程可能正在等待這個事件[可能還有其他],一旦你的等待得到滿足,你會做任何你在上面的state_Changed做的事情。

您還可以有示例代碼:http://msdn.microsoft.com/en-us/library/ms724892%28VS.85%29.aspx

UPD。我意識到,移動平臺是問題 - 都有些不同,但有,但你仍然有一個基於事件的選項: