用C#定义IDocHostUIHandler.GetOptionKeypath

vollkorn 2016-01-29 12:14:04
C# 新手,想通过WebBrowser 给IE做个壳。
尝试通过 IDocHostUIHandler.GetOptionKeypath() 覆盖注册表设定的位置。

HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\CurrentVersion\\InternetSettings
变为
HKEY_CURRENT_USER\\SOFTWARE\\MyApp
但是没有作用, 浏览器还是从 IE的注册表里读设置。 麻烦大家给看看

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetOptionKeyPath(
[Out]
IntPtr pbstrKey,
[In, MarshalAs(UnmanagedType.U4)]
int dw);

int NativeMethods.IDocHostUIHandler.GetOptionKeyPath(IntPtr pbstrKey, int dw)
{
Debug.Print("IDocHostUIHandler.GetOptionKeyPath ");
string keypath = "Software\\MyApp" + Char.MinValue; //null terminator +'\0';
char[] arr = keypath.ToCharArray();
pbstrKey = NativeMethods.CoTaskMemAlloc(new IntPtr(keypath.Length * sizeof(char));
for (int ctr = 0; ctr < keypath.Length; ctr++)
{
IntPtr newptr = IntPtr.Add(pbstrKey, ctr * sizeof(char));
Marshal.WriteInt16(newptr, arr[ctr]);
//Console.Write("{0} ", (char)Marshal.ReadIntPtr(newptr));
}
return 0; //S_OK
}
...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
vollkorn 2016-01-29
  • 打赏
  • 举报
回复
没有人知道吗, 自己顶一下。 试了好久都不行。 目前只找到了C++ 的例子
HRESULT CBrowserHost::GetOptionKeyPath(LPOLESTR *pchKey, DWORD dwReserved)
{
    HRESULT hr;
    WCHAR* szKey = L"Software\\MyCompany\\MyApp";
	
    //  cbLength is the length of szKey in bytes.
    size_t cbLength;
    hr = StringCbLengthW(szKey, 1280, &cbLength);
    //  TODO: Add error handling code here.
    
    if (pchKey)
    {
        *pchKey = (LPOLESTR)CoTaskMemAlloc(cbLength + sizeof(WCHAR));
        if (*pchKey)
            hr = StringCbCopyW(*pchKey, cbLength + sizeof(WCHAR), szKey);
    }
    else
        hr = E_INVALIDARG;

    return hr;
}

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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