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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Minecraft Modding】创建第一个Item

    【Minecraft Modding】创建第一个Item【MinecraftModding】创建第一个Item1.编辑mods.toml文件2.建立目录和包3.编辑Test.java3.注册物品4.定义物品的属性5.runClient在环境创建完成的基础上,就可以开始创建模组了!本文将叙述如何创建一个Item,即Minecraft中的掉落物。1.编辑mods.toml文件首先需要在IntelliJIDEA中载入项目,找到src\main\resources\META-INF\mods.toml文件。该文件包含了这个Mo

    2022年7月8日
    26
  • kaptcha验证码使用

    kaptcha验证码使用参照文章完善:http://blog.csdn.net/pandakong/article/details/8799534效果图:官方地址:https://code.google.com/p/kaptcha/w/listkaptcha是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用c

    2022年6月18日
    21
  • ORA-12154 问题解决办法

    ORA-12154 问题解决办法问题 ORA-12154: TNS:couldnotresolvetheconnectidentifierspecified,即无法解析指定的连接标识符。这说明缺少了一个环境变量,TNS_ADMIN。    解决方法:右击我的电脑->属性 ->高级 ->环境变量->系统变量->新建,    变量名为:TNS_A

    2022年7月24日
    30
  • 微信推送消息遇到的坑 – 返回error code 40008,并且发送不成功[通俗易懂]

    微信推送消息遇到的坑 – 返回error code 40008,并且发送不成功[通俗易懂]api文档就是这里啦。https://work.weixin.qq.com/api/doc#90000/90135/90236/%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF我感觉腾讯并没有把这个errorcode做得很细,反之,非常笼统,让你看到这个err不知所措不晓得到底啥问题。我这边要用微信接收系统发出来的alert,比如哪个服务器cpu负荷…

    2022年6月10日
    171
  • Swoole的多进程模块[通俗易懂]

    Swoole的多进程模块

    2022年2月11日
    54
  • 表空间的状态(二) – read/write

    表空间的状态(二) – read/write

    2022年1月22日
    38

发表回复

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

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