用C#定义IDocHostUIHandler.GetOptionKeypath

问题描述

C#新手,想通过WebBrowser给IE做个壳。尝试通过IDocHostUIHandler.GetOptionKeypath()覆盖注册表设定的位置。从HKEY_CURRENT_USER\SOFTWARE\Microsoft\WindowsCurrentVersion\InternetSettings变为HKEY_CURRENT_USER\SOFTWARE\MyApp但是没有作用,浏览器还是从IE的注册表里读设置。麻烦大家给看看[return:MarshalAs(UnmanagedType.I4)][PreserveSig]intGetOptionKeyPath([Out]IntPtrpbstrKey,[In,MarshalAs(UnmanagedType.U4)]intdw);intNativeMethods.IDocHostUIHandler.GetOptionKeyPath(IntPtrpbstrKey,intdw){Debug.Print("IDocHostUIHandler.GetOptionKeyPath");stringkeypath="Software\MyApp"+Char.MinValue;//nullterminator+'';char[]arr=keypath.ToCharArray();pbstrKey=NativeMethods.CoTaskMemAlloc(newIntPtr(keypath.Length*sizeof(char));for(intctr=0;ctr<keypath.Length;ctr++){IntPtrnewptr=IntPtr.Add(pbstrKey,ctr*sizeof(char));Marshal.WriteInt16(newptr,arr[ctr]);//Console.Write("{0}",(char)Marshal.ReadIntPtr(newptr));}return0;//S_OK}

解决方案

解决方案二:
没有人知道吗,自己顶一下。试了好久都不行。目前只找到了C++的例子HRESULTCBrowserHost::GetOptionKeyPath(LPOLESTR*pchKey,DWORDdwReserved){HRESULThr;WCHAR*szKey=L"Software\MyCompany\MyApp";//cbLengthisthelengthofszKeyinbytes.size_tcbLength;hr=StringCbLengthW(szKey,1280,&cbLength);//TODO:Adderrorhandlingcodehere.if(pchKey){*pchKey=(LPOLESTR)CoTaskMemAlloc(cbLength+sizeof(WCHAR));if(*pchKey)hr=StringCbCopyW(*pchKey,cbLength+sizeof(WCHAR),szKey);}elsehr=E_INVALIDARG;returnhr;}

时间: 2024-08-20 21:33:55

用C#定义IDocHostUIHandler.GetOptionKeypath的相关文章

定制 WebBrowser 控件

web|控件 因为工作需要,这几天在寻找定制 WebBrowser 控件的方法.原来已经研究过一阵子,原理大概知道,基本就是实现 IDocHostUIHandler 和 IDocHostShowUI 两个接口,IE 控件会在适当的时候调用这两个接口,我只要按照帮助文档的说明设置不同的值就可以了. 挂接这两个接口接口到控件中去,有两种方法:一种是通过 ICustomDoc 接口定制,代码如下: html0.Navigate2("about:blank"); ICustomDoc o =

C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)

先说实在的:最终解决办法是实现IDocHostUIHandler接口,在GetHostInfo方法里解决,但"实现接口"意味着QueryInterface.AddRef.Release三个方法必须实现,所以相关代码是:class CMyWebBrowser : public IDocHostUIHandler{public:    CMyWebBrowser() { m_cRef = 0; }    virtual ~CMyWebBrowser() {}     LONG      

宏定义的黑魔法 - 宏菜鸟起飞手册

宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西.即使是能偶尔使

obj-c中如何定义类的私有实例方法

obj-c原生没有提供此项机制,不像java有private/protected/public方法的概念.obj-c中的@private以及类似的@protected和@public是用于修饰类的实例变量的而不能修饰方法. 正如obj-c没有类变量可以通过定义static静态变量来解决一样,obj-c中类的私有实例方法也是可以通过分类来模拟的.我们可以将分类定义从类的头文件中转移到类的实现文件中来实现: foo.h #import <Foundation/Foundation.h> @inte

innerhtml-无法设置属性“innerHTML”的值: 对象为 null 或未定义

问题描述 无法设置属性"innerHTML"的值: 对象为 null 或未定义 function getdbxx(posturl, paramstr, spanid, inputid) { $.ajax({ type : "post", url : posturl, dataType : 'json', data : 'portletConfigJson=${portletConfigJson}&'+paramstr, success : function(

定义内联元素span的最小高度问题

span这个标签,想必大家都熟悉吧,但有用起来又很麻烦,尤其是需要给它定义宽度和高度的时候   制作html网页经常会使用到span这个标签,但有些朋友对这个标签很多朋友用不好,似乎觉得它又很好用,但有用起来又很麻烦,尤其是需要给它定义宽度和高度的时候.曾经有朋友问:为什么给用css给span定义高度和宽度后,它的宽度和高度仍然没有变化,好像失效了一样? 其实这个问题很简单--先要认清span的属性,因为span属于内联元素,而内联元素是忽略宽度和高度的,明白了这一点解决就很简单了,解决的办法就

C#定义鼠标指针形状

在Windows应用程序中,通过设置控件的Cursor属性可以定义鼠标的显示形状.控件(如Button控件)的Cursor属性用于设置鼠标指针的类型,默认为Default. 语法: public virtual Cursor Cursor { get; set; } 属性值:一个Cursor,表示当鼠标指针位于控件上时显示的光标. Cursor:是一个值,该属性值如表所示. 表 Cursor属性的值 值 说明 AppStarting 获取在应用程序启动时显示的光标 Arrow 获取箭头光标 Cr

连接-TCP通信的数据格式该怎么定义???

问题描述 TCP通信的数据格式该怎么定义??? 请问TCP长连接该怎么定义什么样的数据格式才不会粘包呢?大牛们请指教!谢谢! 解决方案 粘包没关系,只要能正确拆包就行.比如约定: 发送,先发4个字节表述数据的长度,再发数据. 接受,先接受4个取得长度,再按长度读取数据.剩下的就是下个包的. 解决方案二: 自己定义包的结构,里面定义字段定义包的长度等,收到数据后,根据协议解析数据包等

php定义数组和使用示例

 这篇文章主要介绍了php定义数组和使用示例(php数组的定义方法),需要的朋友可以参考下 这个是一个php关于数组的例子,简要的说明了数组的基本使用,示例中加放了注释      代码如下: <?php    //定义一个字符串数组 $fruit = array("apple","orange"); //引用数组的值 $fruit[0];//代表的值是apple $fruit[1];//代表的值是orange //值得注意的是,数组的索引是从0开始的,学过c