免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 882 | 回复: 2
打印 上一主题 下一主题

网络浏览器插件的高手请进。。。  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-21 05:24 |只看该作者 |倒序浏览
我要做一个IE的浏览器插件,(是有报酬的),感性趣的朋友请联系我。


QQ:54706867
或发站内信件。

论坛徽章:
0
2 [报告]
发表于 2005-01-21 08:15 |只看该作者

网络浏览器插件的高手请进。。。

  1. /*  利用BHO做IE插件,这个挺有意思的,给大家分享   */
  2. #define WAIT_TIME       2000        
  3. #define PictureH        109         
  4. #define PictureW        405            
  5. static UINT iTimeID = 0;   
  6. static int WINAPI ShowSplash(HINSTANCE hInstance, UINT iBgBmpHeight, UINT iBgBmpWidth);  
  7. static LRESULT CALLBACK SplashProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  8. extern "C"
  9. BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
  10. {
  11.     TCHAR pszLoader[MAX_PATH];
  12.     LPSTR pstrFileName = NULL;

  13.     if (dwReason == DLL_PROCESS_ATTACH) {
  14.         // 得到当前调用者的名字,如:C:\Program Files\Internet Explorer\IEXPLORE.EXE
  15.         GetModuleFileName(NULL, pszLoader, MAX_PATH);
  16.         pstrFileName = strrchr(pszLoader, '\\');
  17.         if (pstrFileName == NULL) {
  18.             // 出错处理
  19.             // 空指针
  20.             return FALSE;
  21.         }
  22.         pstrFileName++;
  23.         
  24.         // 判断是否是 IE,是则加载启动画面
  25.         if (lstrcmpi(pstrFileName, TEXT("IEXPLORE.EXE")) == NULL) {
  26.             // 加载启动画面
  27.             ShowSplash(hInstance, PictureH, PictureW);                        
  28.         }
  29.         
  30.         _Module.Init(ObjectMap, hInstance, &LIBID_IESTARTLib);
  31.         DisableThreadLibraryCalls(hInstance);
  32.     }
  33.     else if (dwReason == DLL_PROCESS_DETACH) {
  34.         _Module.Term();
  35.     }
  36.     return TRUE;    // ok
  37. }

  38. // IE 启动画面显示

  39. int WINAPI ShowSplash(HINSTANCE hInstance, UINT iBgBmpHeight, UINT iBgBmpWidth)
  40. {
  41.     HWND        hSplashWnd = NULL;
  42.     MSG            stMsg;
  43.     WNDCLASSEX  stWndClassEx;
  44.     TCHAR        szClassName[] = TEXT("LeXX_Splash_Wnd");
  45.     HCURSOR        hMouseCursor =NULL;
  46.     HBRUSH        hBgBrush = NULL;
  47.     HBITMAP        hBgBmp = LoadBitmap(hInstance,    MAKEINTRESOURCE(IDB_SPLASH));

  48.     if (hBgBmp == NULL) {
  49.         // 出错处理
  50.         // 导出位图出错
  51.         return 0;        
  52.     }
  53.    
  54.     hBgBrush = CreatePatternBrush(hBgBmp);
  55.     if (hBgBrush == NULL) {
  56.         // 出错处理
  57.         // 创建画刷出错
  58.         return 0;
  59.     }
  60.     hMouseCursor = LoadCursor(NULL, IDC_ARROW);
  61.     if (hMouseCursor == NULL) {
  62.         // 出错处理
  63.         // 导出光标错误
  64.         return 0;        
  65.     }
  66.    
  67.     stWndClassEx.cbSize            =  sizeof(WNDCLASSEX);
  68.     stWndClassEx.style            = CS_HREDRAW | CS_VREDRAW;
  69.     stWndClassEx.lpfnWndProc    = SplashProc;
  70.     stWndClassEx.cbClsExtra        = NULL;
  71.     stWndClassEx.cbWndExtra        = NULL;
  72.     stWndClassEx.hInstance        = hInstance;
  73.     stWndClassEx.hbrBackground    = hBgBrush;
  74.     stWndClassEx.lpszMenuName    = NULL;
  75.     stWndClassEx.lpszClassName    = szClassName;
  76.     stWndClassEx.hIcon            = NULL;
  77.     stWndClassEx.hIconSm        = NULL;
  78.     stWndClassEx.hCursor        = hMouseCursor;

  79.     if (!RegisterClassEx(&stWndClassEx)) {
  80.         // 出错处理
  81.         // 无法注册窗口类               
  82.         return 0;
  83.     }
  84.    
  85.     // 使启动画面加载在屏幕正中
  86.     int iWndLeft = (GetSystemMetrics(SM_CXSCREEN) - iBgBmpWidth) / 2;
  87.     int iWndTop = (GetSystemMetrics(SM_CYSCREEN) - iBgBmpHeight) / 2;
  88.    
  89.     hSplashWnd = CreateWindowEx(WS_EX_LEFT, szClassName, TEXT("Loading..."),
  90.                                 WS_POPUP, iWndLeft, iWndTop, iBgBmpWidth, iBgBmpHeight,
  91.                                 NULL,NULL,hInstance,NULL);
  92.     if (hSplashWnd == NULL) {
  93.         // 出错处理
  94.         // 无法创建窗口               
  95.         return 0;
  96.     }
  97.     ShowWindow(hSplashWnd, SW_SHOWNORMAL);
  98.     UpdateWindow(hSplashWnd);
  99.    
  100.     // 消息循环
  101.     while (GetMessage(&stMsg, NULL, 0, 0)) {
  102.         TranslateMessage(&stMsg);
  103.           DispatchMessage(&stMsg);
  104.     }

  105.     return stMsg.wParam;
  106. }

  107. LRESULT CALLBACK SplashProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  108. {
  109.     switch (uMsg) {
  110.         case WM_CREATE:
  111.             // 定时器
  112.             iTimeID = SetTimer(hWnd, 1, WAIT_TIME,NULL);
  113.             return 0;

  114.         case WM_TIMER:
  115.             KillTimer(hWnd, iTimeID);
  116.             DestroyWindow(hWnd);            
  117.             return 0;

  118.         case WM_DESTROY:
  119.             PostQuitMessage(NULL);
  120.             return 0;            
  121.     }
  122.     return DefWindowProc(hWnd, uMsg, wParam, lParam);
  123. }

  124. //(注意其中 {EA1EFEA2-1051-4384-A81E-74DE2167EEDF} 只是笔者的 CLSID ,自己写时需做相应的改变):

  125. HKLM
  126. {
  127.     SOFTWARE
  128.     {
  129.         Microsoft
  130.         {
  131.             Windows
  132.             {
  133.                 CurrentVersion
  134.                 {
  135.                     Explorer
  136.                     {
  137.                         'Browser Helper Objects'
  138.                         {
  139.                             {EA1EFEA2-1051-4384-A81E-74DE2167EEDF}
  140.                         }
  141.                     }
  142.                 }
  143.             }
  144.         }
  145.     }
  146. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-01-21 08:34 |只看该作者

网络浏览器插件的高手请进。。。

按理,楼主的帖子是要删的。可辛苦了www.netbor.net的代码,姑且留在这里,给你锁了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP