例子是通过修改注册表实现的,
程序是基于mfc的dialog,修改注册表的代码是在OnInitDialog函数里的
BOOL CiePlugin1_dDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
CRegKey reg;
CString keyName = L"SoftWare\\Microsoft\\Internet Explorer\\Extensions\\{AB74FC6A-098C-4369-89F8-AC6468BD09E9}";;
TCHAR pathName[MAX_PATH];
TCHAR iconPathName[MAX_PATH];
TCHAR hotIconPathName[MAX_PATH];
GetModuleFileName(0,pathName,MAX_PATH);
wcscpy_s(iconPathName,pathName);
wcscpy_s(hotIconPathName,pathName);
wcscat_s(hotIconPathName,L",129");
wcscat_s(iconPathName,L",130");
reg.Create(HKEY_LOCAL_MACHINE, keyName);
reg.SetValue(L"{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}",L"CLSID");
reg.SetValue(L"Yes",L"Default Visible");
reg.SetValue(L"Example",L"ButtonText");
reg.SetValue(iconPathName,L"Icon");
reg.SetValue(hotIconPathName,L"HotIcon");
reg.SetValue(pathName,L"Exec"); return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}这样的话,每次点击ie工具栏上的那个按钮,每次都会弹出一个对话框,又要调用OnInitDialog函数,这样的话又会修改注册表了?
不知道大家怎么看的,我的理解有问题吗?