例子是通过修改注册表实现的,
程序是基于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函数,这样的话又会修改注册表了?
不知道大家怎么看的,我的理解有问题吗?
程序是基于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函数,这样的话又会修改注册表了?
不知道大家怎么看的,我的理解有问题吗?
解决方案 »
- MFC中的ODBC类登陆模块
- List Control 插入图片后,选中状态,图片消失了,变成空白。
- 为什么继承CExit类GetSafeHdc()为0?
- 关于listcontrol的问题,help!!!
- 遇见关于发送SYN数据包的问题,欢迎索要源码帮忙更正,UP有分!
- 如何编程实现关闭某个端口?就像系统提供的TCP/IP筛选机制?
- 和桌面通信的问题!!!!!!!
- MultiMedia Timer 中把精度设为 2 ms ,而Event函数的执行需要 5 ms,后果如何,宜采取什么措施?(不改变其中的2 ms 和5 ms)
- 其它进程的函数怎么替换为我自己的函数
- 怎样动态创建一非模态对话框,其父窗体是MDI中某一子窗体,用什么函数?内附代码
- 问一个简单的嵌入flash问题
- 关于链接通不过,各位帮忙看看这是什么问题???
----------
我的疑问是这个例子是不是不太好,每次点击就重新往注册表写一遍,会不会不太好?
我想是不是第一次写完相当于安装了这个按钮就好了,之后就不用再安装了吧
要不就另外做一个程序,用来专门注册按钮的