500分提问,怎样在IE的工具栏中加入自已的工具栏?就像Google,sohu的工具栏!

cdws222 2003-03-04 11:23:40
如题


500分一定给,结贴后另开两贴送300分
...全文
105 55 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdws222 2003-03-13
  • 打赏
  • 举报
回复
好吧,就给你499分,给favorit1分吧
liuxing_1w 2003-03-12
  • 打赏
  • 举报
回复
眼花缭乱 啊?

有个问题。
在腾迅的浏览器加,是否一样。
如果自己制作浏览器,怎样预留接口…………
jbz 2003-03-12
  • 打赏
  • 举报
回复
高手如云呀。

是不是做出来就象Flashget在IE上的工具栏一样?太独特了。
  • 打赏
  • 举报
回复
已上传..
ftp://202.195.246.202/incoming/cker
evence 2003-03-12
  • 打赏
  • 举报
回复
学习,收藏。
WhyAndAnswer 2003-03-12
  • 打赏
  • 举报
回复
收藏先
whitelion 2003-03-12
  • 打赏
  • 举报
回复
咳……咳……
  • 打赏
  • 举报
回复
鼻涕么、????
penu 2003-03-12
  • 打赏
  • 举报
回复
我也要。

penu@sina.com
HUANG_JH 2003-03-12
  • 打赏
  • 举报
回复
to cker:
放到 ftp://202.195.246.202 啊,大家一起进步嘛
favorit 2003-03-12
  • 打赏
  • 举报
回复
感动呀~~~~~~
从此以后,偶的BCB专家分里,又多了cker给的1分:)
感动得什么什么都流出来了
  • 打赏
  • 举报
回复
嗬嗬,再开两贴。这样,

CKER请进来拿分...
并注明此贴
http://expert.csdn.net/Expert/topic/1488/1488928.xml?temp=.8139307。。。


ho ho...,偶想分想得慌啊。

favorit这么可怜,就给她一分吧。。。。:)
favorit 2003-03-12
  • 打赏
  • 举报
回复
再开两个帖子:cker,来抢分了!200分呀!

嘻嘻
liye20000 2003-03-12
  • 打赏
  • 举报
回复
cker 我也想要一分,liye20000@netease.com
cdws222 2003-03-12
  • 打赏
  • 举报
回复
好了,这500分肯定是cker的了,另外的300分怎么给你呀?
  • 打赏
  • 举报
回复
已发
fi9 2003-03-11
  • 打赏
  • 举报
回复
?!
眼都看花了!
还是有空再来看过吧!
记得在《程序员2002年合订本》中有一个例子,不过那是写面板的,我N天前也想过做像这样一个东东,所就看了一下那篇文章,主要还是由几个IE的Interface里面继承出来,然后用Interface来实现就可以了。虽然文章是做面板的,可是与此还是差不多的!
不过,经过上面N人的一堆堆代码应该是可以搞掂了吧!
cdws222 2003-03-11
  • 打赏
  • 举报
回复
mail:zhaosoft@21cn.com
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
/**************************************************************************
#include statements
**************************************************************************/
#include <vcl.h>
#include <windows.h>

#include <ole2.h>
#include <comcat.h>
#include <olectl.h>
#include "ClsFact.h"

/**************************************************************************
GUID stuff
**************************************************************************/

//this part is only done once
//if you need to use the GUID in another file, just include Guid.h
#pragma data_seg(".text")
#define INITGUID
#include <initguid.h>
#include <shlguid.h>
#include "Guid.h"
#pragma data_seg()

/**************************************************************************
private function prototypes
**************************************************************************/

extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID);
BOOL RegisterServer(CLSID, LPTSTR);
BOOL RegisterComCat(CLSID, CATID);
BOOL UnregisterServer(CLSID);
BOOL UnregisterComCat(CLSID, CATID);

/**************************************************************************
global variables
**************************************************************************/

HINSTANCE g_hInst;
UINT g_DllRefCount;

/**************************************************************************

DllMain

**************************************************************************/

extern "C" BOOL WINAPI DllMain( HINSTANCE hInstance,
DWORD dwReason,
LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hInst = hInstance;
break;

case DLL_PROCESS_DETACH:
break;
}

return TRUE;
}

/**************************************************************************

DllCanUnloadNow

**************************************************************************/

STDAPI __export DllCanUnloadNow(void)
{
return (g_DllRefCount ? S_FALSE : S_OK);
}

/**************************************************************************

DllGetClassObject

**************************************************************************/

STDAPI __export DllGetClassObject( REFCLSID rclsid,
REFIID riid,
LPVOID *ppReturn)
{
*ppReturn = NULL;

//if we don't support this classid, return the proper error code
if( !IsEqualCLSID(rclsid, CLSID_SampleToolBand))
return CLASS_E_CLASSNOTAVAILABLE;

//create a CClassFactory object and check it for validity
CClassFactory *pClassFactory = new CClassFactory(rclsid);
if(NULL == pClassFactory)
return E_OUTOFMEMORY;

//get the QueryInterface return for our return value
HRESULT hResult = pClassFactory->QueryInterface(riid, ppReturn);

//call Release to decement the ref count - creating the object set it to one
//and QueryInterface incremented it - since its being used externally (not by
//us), we only want the ref count to be 1
pClassFactory->Release();

//return the result from QueryInterface
return hResult;
}

/**************************************************************************

DllRegisterServer

**************************************************************************/

STDAPI __export DllRegisterServer(void)
{
//Register the desk band object.
if(!RegisterServer(CLSID_SampleToolBand, TEXT("Sample &Tool Band")))
return SELFREG_E_CLASS;

//Register the component categories for the desk band object.
if(!RegisterComCat(CLSID_SampleToolBand, CATID_DeskBand))
return SELFREG_E_CLASS;

return S_OK;
}
/**************************************************************************

DllRegisterServer

**************************************************************************/

STDAPI __export DllUnregisterServer(void)
{
if(!UnregisterComCat(CLSID_SampleToolBand, CATID_DeskBand))
return S_FALSE ;

if(!UnregisterServer(CLSID_SampleToolBand))
return S_FALSE ;

return S_OK;
}
/**************************************************************************

RegisterServer

**************************************************************************/

#include <Registry.hpp>
BOOL RegisterServer(CLSID clsid, LPTSTR lpszTitle)
{
char szModule[MAX_PATH];
AnsiString strCLSID;

strCLSID = GUIDToString(clsid);
//get this app's path and file name
GetModuleFileName(g_hInst, szModule, MAX_PATH);

TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_CLASSES_ROOT;

if(Registry->OpenKey("CLSID\\"+strCLSID,true))
{
Registry->WriteString("",lpszTitle);
Registry->OpenKey("InprocServer32",true);
Registry->WriteString("",szModule);
Registry->WriteString("ThreadingModel","Apartment");
}
else
return false;
//ToolBand
Registry->RootKey = HKEY_LOCAL_MACHINE;
if(Registry->OpenKey("Software\\Microsoft\\Internet Explorer\\Toolbar",true))
{
Registry->WriteString(strCLSID,"");
}
else
return false;

Registry->CloseKey();
}
__finally
{
delete Registry;
}
return true;
}

/**************************************************************************

UnregisterServer

**************************************************************************/

BOOL UnregisterServer(CLSID clsid)
{
AnsiString strCLSID;
strCLSID = GUIDToString(clsid);
TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_CLASSES_ROOT;
if(Registry->KeyExists("CLSID\\"+strCLSID))
{
Registry->DeleteKey("CLSID\\"+strCLSID);
}
else
return false;

//ToolBand
Registry->RootKey = HKEY_LOCAL_MACHINE;
if(Registry->KeyExists("Software\\Microsoft\\Internet Explorer\\Toolbar"))
{
Registry->DeleteValue(strCLSID);
}
else
return false;
}
__finally
{
delete Registry;
}
return true;
}

/**************************************************************************

RegisterComCat

**************************************************************************/

BOOL RegisterComCat(CLSID clsid, CATID CatID)
{
ICatRegister *pcr;
HRESULT hr = S_OK ;

CoInitialize(NULL);

hr = CoCreateInstance( CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(LPVOID*)&pcr);

if(SUCCEEDED(hr))
{
hr = pcr->RegisterClassImplCategories(clsid, 1, &CatID);

pcr->Release();
}

CoUninitialize();

return SUCCEEDED(hr);
}

/**************************************************************************

UnregisterComCat

**************************************************************************/

BOOL UnregisterComCat(CLSID clsid, CATID CatID)
{
ICatRegister *pcr;
HRESULT hr = S_OK ;

CoInitialize(NULL);

hr = CoCreateInstance( CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(LPVOID*)&pcr);

if(SUCCEEDED(hr))
{
hr = pcr->UnRegisterClassImplCategories(clsid, 1, &CatID);
pcr->Release();
}

CoUninitialize();

return SUCCEEDED(hr);
}
  • 打赏
  • 举报
回复
完整的代码很多阿,贴出来大家都要看花眼了。
我还是说一说主要的过程吧。你给我个Mail,我发给你算了。

程序的主题就是要实现
class CExplorerBar : public IDeskBand,
public IInputObject,
public IObjectWithSite,
public IPersistStream,
public IContextMenu
{

...

//CKer Added.
IWebBrowser2* IE;
TForm1* Form1;
TWndMethod FOldWndProc;

这样一个COM对象类,由他来生成Form1的实例,普通的Form有一个小小的区别在于这个Form的父窗口是非VCL的,也就是IE。并且修改Form1的WindowProc...

....
加载更多回复(35)

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧