当前位置:编程学习 > C#/ASP.NET >>

WebBrower如何加载QQ快速登录插件

在webBrower里打开QQ相关页面时,可以像如图显示快速一键登录


如何可以做到? 请高人给个Demo最好,谢了!! --------------------编程问答-------------------- 先添加引用Microsoft Internet Controls(SHDocVw)和Microsoft HTML Object Library(MSHTML)

//using System;
//using System.Runtime.InteropServices;
//using System.Windows.Forms;
//using mshtml;

void QuickLoginQQ()
{
HtmlWindow frame = webBrowser1.Document.Window.Frames["login_frame"];
frame = frame.Document.Window.Frames["xui"];

var sp = (IServiceProvider)(frame.DomWindow);
Object browser = null;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out browser);

var doc = (IHTMLDocument3)((SHDocVw.IWebBrowser2)browser).Document;
var div = (IHTMLElement2)doc.getElementById("qlogin_list");
var a = (IHTMLElement)div.getElementsByTagName("a").item(0);
a.click();
}

private static Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
private static Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E");

[ComImport(), ComVisible(true), Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), 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);
}
--------------------编程问答--------------------
引用 1 楼 jshi123 的回复:
先添加引用Microsoft Internet Controls(SHDocVw)和Microsoft HTML Object Library(MSHTML)

//using System;
//using System.Runtime.InteropServices;
//using System.Windows.Forms;
//using mshtml;

void QuickLoginQQ()
{
HtmlWindow frame = webBrowser1.Document.Window.Frames["login_frame"];
frame = frame.Document.Window.Frames["xui"];

var sp = (IServiceProvider)(frame.DomWindow);
Object browser = null;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out browser);

var doc = (IHTMLDocument3)((SHDocVw.IWebBrowser2)browser).Document;
var div = (IHTMLElement2)doc.getElementById("qlogin_list");
var a = (IHTMLElement)div.getElementsByTagName("a").item(0);
a.click();
}

private static Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
private static Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E");

[ComImport(), ComVisible(true), Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), 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);
}


这个好像不行,还总是报错。
其实我的要求就是像那个图那样显示出来登录QQ的列表,不需要让它直接登录。显示出来后让用户自己选择点击QQ登录即可! --------------------编程问答--------------------

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using mshtml;

namespace WinApp1
{
public partial class Form1 : Form
{
private WebBrowser webBrowser1;
private Button button1;

public Form1()
{
InitializeComponent();

webBrowser1 = new WebBrowser
{
Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(ClientSize.Width, ClientSize.Height - 40),
};
button1 = new Button
{
Anchor = AnchorStyles.Bottom, // | AnchorStyles.Left | AnchorStyles.Right,
Location = new Point(ClientSize.Width/2 - 40, ClientSize.Height - 30),
Text = "login",
};

Controls.AddRange(new Control[]{webBrowser1, button1});

webBrowser1.Navigate("http://qzone.qq.com/");
button1.Click += (s, e) => QuickLoginQQ();
}

void QuickLoginQQ()
{
HtmlWindow frame = webBrowser1.Document.Window.Frames["login_frame"];
frame = frame.Document.Window.Frames["xui"];

var sp = (IServiceProvider)(frame.DomWindow);
Object browser = null;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out browser);

var doc = (IHTMLDocument3)((SHDocVw.IWebBrowser2)browser).Document;
var div = (IHTMLElement2)doc.getElementById("qlogin_list");
var a = (IHTMLElement)div.getElementsByTagName("a").item(0);
a.click();
}

private static Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
private static Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E");

[ComImport(), ComVisible(true), Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), 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);
}
}
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,