C#用什么开发_hbase写数据流程

C#用什么开发_hbase写数据流程最近公司程序需要嵌入各个浏览器的插件。首先

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

最近公司程序需要嵌入各个浏览器的插件。

首先需要支持的是IE的插件。又称为BHO(Browser Helper Object 浏览器辅助对象).

比起在C++中开发BHO,c#确实是更加简单

我的BHO主要为了实现通过点击浏览器有效下载链接,然后调用我们自己的程序(和迅雷差不多)

BHO主体程序时UrlTrack类。而这个类我们需要从接口IObjectWithSite继承。

IObjectWithSite的源码比较简单

[ComImport(), ComVisible(true), Guid("e479dd28-3784-49df-8c1b-2b0da2191a92"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IServiceProvider
    {
        [return: MarshalAs(UnmanagedType.I4)]
        [PreserveSig]
        int QueryService(ref Guid guidService, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
    }

Jetbrains全家桶1年46,售后保障稳定

上述的GUID可以自己手动生成一个

另外主体程序UrlTrack类

Getsite

 public int Getsite(ref Guid guid, out IntPtr ppvsite)
        {
            IntPtr punk = Marshal.GetIUnknownForObject(webBrowser);
            int hr = Marshal.QueryInterface(punk, ref guid, out ppvsite);

            Marshal.Release(punk);

            return hr;
        }

Setsite—按自己需求给webBrowser添加各种事件来监控IE的事件,并触发

public int Setsite(Object newSite)
        {
            if (newSite != null)
            {
                webBrowser = (SHDocVw.WebBrowser)newSite;
                webBrowser.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(FileDownload);

                webBrowser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
            }
            else
            {
                webBrowser.FileDownload -= new DWebBrowserEvents2_FileDownloadEventHandler(FileDownload);
                webBrowser.BeforeNavigate2 -= new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
            }

            return 0;
        }

RegisterBHO—BHO加入到注册表的方法

[ComRegisterFunction]
        public static void RegisterBHO(Type type)
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_NAME, true);
            if (registryKey == null)
            {
                registryKey = Registry.LocalMachine.CreateSubKey(BHO_KEY_NAME);
            }
            string guid = type.GUID.ToString("B");
            RegistryKey bhoKey = registryKey.OpenSubKey(guid, true);
            if (bhoKey == null)
            {
                bhoKey = registryKey.CreateSubKey(guid);
            }
            // NoExplorer: dword = 1 prevents the BHO to be loaded by Explorer.exe   
            bhoKey.SetValue("NoExplorer", 1);
            bhoKey.Close();
            registryKey.Close();
        }

UnregisterBHO— BHO清理出注册表的方法

[ComUnregisterFunction]
        public static void UnregisterBHO(Type type)
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_NAME, true);
            string guid = type.GUID.ToString("B");
            if (registryKey != null)
                registryKey.DeleteSubKey(guid, false);
        }

最后生成的DLL。我们可以通过系统的Regasm.exe程序来进度COM注册

命令主要是  Regasm /codebase XX.dll( regasm.exe在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,注册时把regasm.exe拷贝出来和dll放置同一个目录下,便可以进度注册)

然后你的IE浏览器就被绑架了。。

有个问题需要注意哦!!生成dll的同时,debug目录下还有Interop.SHDocVw.dll需要同时拷贝过去,否则BHO不会生效。。我自己被这里坑了2,3天,找错误。





好吧!我知道不给源码是不能满足你们这群狼的。在我的资源里面找一下

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234693.html原文链接:https://javaforall.net

(0)
上一篇 2025年5月28日 下午1:15
下一篇 2025年5月28日 下午1:43


相关推荐

  • git clone下来的代码放在哪里,如何放在指定路径

    git clone下来的代码放在哪里,如何放在指定路径今天从github上clone了代码,最后出来形如:但是话说我的东西下载到哪里去了呢????摸不着头脑,然后百度之,发现一般会放在命令行对应的路径下,也就是win+R>cmd查看命令行地址:然后去此路径下寻找之,果然在这里。那么,如何才能clone到自己指定的路径下呢?百度之得如下说法:gitclonehttps://github.com/jque…

    2022年7月21日
    49
  • 0元搭建卡盟主站_哪个卡盟平台好

    0元搭建卡盟主站_哪个卡盟平台好设置桶配额功能说明设置桶的配额值,单位为字节,支持的最大值为263-1,配额值设为0表示桶的配额没有上限。方法定义1.ObsClient->setBucketQuota(array$parameter)2.ObsClient->setBucketQuotaAsync(array何查看桶标签://引入依赖库require’vendor/autoload.php’;//…

    2022年8月13日
    8
  • 使用RabbitMQ异步执行业务

    使用RabbitMQ异步执行业务RabbitMQ 即一个消息队列 主要是用来实现应用程序的异步和解耦 同时也能起到消息缓冲 消息分发的作用 使用 RabbitMQ 实现异步更新文章浏览量 提升阅读文章时的响应速度 从直接更新数据库耗时 450ms 到异步更新数据库耗时 50ms 明显提升接口性能 非常的 nice

    2026年3月19日
    2
  • docker nginx挂载目录_挂载成功之后如何安装

    docker nginx挂载目录_挂载成功之后如何安装创建目录一般将nginx目录挂载到宿主机方便操作,创建nginx目录:mkdir/home/dockernginxmkdir/home/dockernginx/{conf,html,logs}创建nginx配置文件如下:vim/home/dockernginx/conf/nginx.confnginx默认配置如下:usernginx;worker_processesauto;error_log/var/log/nginx/error.lognotice;pi

    2022年8月20日
    12
  • apache struts 2 任意代码执行漏洞

    apache struts 2 任意代码执行漏洞漏洞检测地址:http://0day.websaas.cn漏洞利用工具,如下:漏洞利用,如下:step1step2step3提权思路,如下:1、开启虚拟终端,执行命令,但是,提示“连接被

    2022年7月3日
    33
  • anp相关_ANP是什么的缩写

    anp相关_ANP是什么的缩写https://www.ctolib.com/docs/sfile/prometheus-book/index.htmlprometheus指南https://e.huawei.com/cn/material/onLineView?MaterialID=c06476e14afe4d45916555318d7b5b5d华为FabricInsight技术白皮书转载于:h…

    2025年6月4日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号