管理路由器每次要输密码真是麻烦,自己来写个浏览器

原创 2013年11月27日 12:24:49

本人使用 TP-LINK 路由器,每次打开都会弹出窗口让输入密码,能不能简单一点呢?下面就是实现了自动登录功能的简易浏览器代码。

用 VS2008 新建一个 windows 应用程序,在默认窗体中放一个 WebBrowser 控件,执行时需带三个参数,分别是路由器IP地址,用户名,密码。

Program.cs 如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace AutoLogin
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] ps)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(ps));
        }
    }
}

Form1.cs 如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace AutoLogin
{
    public partial class Form1 : Form, IOleClientSite, IServiceProvider, IAuthenticate
    {
        string[] ps;
        string url, uid, pwd;

        public Form1(string[] ps)
        {
            this.ps = ps;
            InitializeComponent();
            if (ps.Length >= 1)
            {
                url = ps[0];
                if (ps.Length >= 3)
                {
                    uid = ps[1];
                    pwd = ps[2];
                }
            }
        }

        public static Guid IID_IAuthenticate = new Guid("79eac9d0-baf9-11ce-8c82-00aa004ba90b");
        public const int INET_E_DEFAULT_ACTION = unchecked((int)0x800C0011);
        public const int S_OK = unchecked((int)0x00000000);
        private bool haspass = true;

        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("about:blank");

            object obj = webBrowser1.ActiveXInstance;
            IOleObject oc = obj as IOleObject;
            oc.SetClientSite(this as IOleClientSite);

            webBrowser1.Navigate(url);
        }

        #region IOleClientSite 成员

        public void SaveObject()
        {
        }

        public void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk)
        {
        }

        public void GetContainer(object ppContainer)
        {
            ppContainer = this;
        }

        public void ShowObject()
        {
        }

        public void OnShowWindow(bool fShow)
        {
        }

        public void RequestNewObjectLayout()
        {
        }

        #endregion

        #region IServiceProvider 成员

        public int QueryService(ref Guid guidService, ref Guid riid, out IntPtr ppvObject)
        {
            int nRet = guidService.CompareTo(IID_IAuthenticate);
            if (nRet == 0)
            {
                nRet = riid.CompareTo(IID_IAuthenticate);
                if (nRet == 0)
                {
                    if (haspass && !string.IsNullOrEmpty(pwd))
                    {
                        ppvObject = Marshal.GetComInterfaceForObject(this, typeof(IAuthenticate));
                        haspass = false;
                        return S_OK;
                    }
                }
            }
            ppvObject = new IntPtr();
            return INET_E_DEFAULT_ACTION;
        }

        #endregion

        #region IAuthenticate 成员

        public int Authenticate(ref IntPtr phwnd, ref IntPtr pszUsername, ref IntPtr pszPassword)
        {
            pszUsername = Marshal.StringToCoTaskMemAuto(uid);
            pszPassword = Marshal.StringToCoTaskMemAuto(pwd);
            return S_OK;
        }

        #endregion
    }

    #region COM Interfaces
    [ComImport,
    Guid("00000112-0000-0000-C000-000000000046"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleObject
    {
        void SetClientSite(IOleClientSite pClientSite);
        void GetClientSite(IOleClientSite ppClientSite);
        void SetHostNames(object szContainerApp, object szContainerObj);
        void Close(uint dwSaveOption);
        void SetMoniker(uint dwWhichMoniker, object pmk);
        void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);
        void InitFromData(IDataObject pDataObject, bool
        fCreation, uint dwReserved);
        void GetClipboardData(uint dwReserved, IDataObject ppDataObject);
        void DoVerb(uint iVerb, uint lpmsg, object pActiveSite,
        uint lindex, uint hwndParent, uint lprcPosRect);
        void EnumVerbs(object ppEnumOleVerb);
        void Update();
        void IsUpToDate();
        void GetUserClassID(uint pClsid);
        void GetUserType(uint dwFormOfType, uint pszUserType);
        void SetExtent(uint dwDrawAspect, uint psizel);
        void GetExtent(uint dwDrawAspect, uint psizel);
        void Advise(object pAdvSink, uint pdwConnection);
        void Unadvise(uint dwConnection);
        void EnumAdvise(object ppenumAdvise);
        void GetMiscStatus(uint dwAspect, uint pdwStatus);
        void SetColorScheme(object pLogpal);
    }

    [ComImport,
    Guid("00000118-0000-0000-C000-000000000046"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleClientSite
    {
        void SaveObject();
        void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);
        void GetContainer(object ppContainer);
        void ShowObject();
        void OnShowWindow(bool fShow);
        void RequestNewObjectLayout();
    }

    [ComImport,
    GuidAttribute("6d5140c1-7436-11ce-8034-00aa006009fa"),
    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown),
    ComVisible(false)]
    public interface IServiceProvider
    {
        [return: MarshalAs(UnmanagedType.I4)]
        [PreserveSig]
        int QueryService(ref Guid guidService, ref Guid riid, out IntPtr
        ppvObject);
    }

    [ComImport, GuidAttribute("79EAC9D0-BAF9-11CE-8C82-00AA004BA90B"),
    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown),
    ComVisible(false)]
    public interface IAuthenticate
    {
        [return: MarshalAs(UnmanagedType.I4)]
        [PreserveSig]
        int Authenticate(ref IntPtr phwnd,
        ref IntPtr pszUsername,
        ref IntPtr pszPassword
        );
    }

    #endregion
}


 

Git版本控制 为什么那么复杂 头大 (忍不住强烈吐槽)

想把自己的源码保存到云端,想到了用Github.com,然后便开始看怎么使用GIT。 一开始,没有接触之前,想的很简单的。应该就跟SVN差不多吧,写好了提交就可以了。 不过使用了之后才发现根本就不是这...
  • default7
  • default7
  • 2014年07月18日 17:29
  • 5845

解决浏览器自动填充密码框的问题

使用Chrome、Firefox和360等浏览器,在某个网站进行提交表单的操作时,浏览器会提示是否保存密码 如果选择了保存密码,之后在浏览这个网站的任何一个有密码输入框的的页面时,浏览器...
  • sunshineboy_oO
  • sunshineboy_oO
  • 2016年10月13日 16:05
  • 1825

解决浏览器记住密码输入框的问题

使用HTML属性 autocompleteoff 使用js在页面加载的时候设置input的value为空 增加input typepassword 增加form 最终解决方案 Summary 在浏览器...
  • imdennisleung
  • imdennisleung
  • 2016年04月22日 15:08
  • 7741

用 Flask 来写个轻博客 (30) — 使用 Flask-Admin 增强文章管理功能

目录目录 前文列表 扩展阅读 实现文章管理功能 实现效果前文列表用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flas...
  • Jmilk
  • Jmilk
  • 2016年12月21日 12:01
  • 3501

用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

目录目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 初始化 DB Migrate 开始第一次跟踪 将记录文件应用到数据库中实时升级数据库结构 回滚到某一个记录环境...
  • Jmilk
  • Jmilk
  • 2016年11月20日 18:14
  • 3075

我也来写个博客,已下载文件的管理demo

先看看效果图 intent =
  • son__of__sun
  • son__of__sun
  • 2014年10月23日 15:23
  • 388

解决win8.1每次登陆都要输密码或确认自动登录帐号(win7一样)

登陆Win8之后,找到“搜索”功能(Win+Q或者鼠标指向右上角点放大镜)。输入 netplwiz 然后在弹出来的窗口中,去除“要使用本计算机,用户必须输入用户名和密码”选择前面的√。 点击确定后,会...
  • u012127798
  • u012127798
  • 2014年06月24日 20:46
  • 604

用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板

目录目录 前文列表 扩展阅读 使用 Bootstrap 编写 Jinja 模板文件 继承一个模板前文列表用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) —...
  • Jmilk
  • Jmilk
  • 2016年11月23日 16:00
  • 3066

用 Flask 来写个轻博客 (28) — 使用 Flask-Assets 压缩 CSS/JS 提升网页加载速度

目录目录 前文列表 扩展阅读 Flask-Assets 将 Flask-Assets 应用到项目中前文列表用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) —...
  • Jmilk
  • Jmilk
  • 2016年12月20日 16:45
  • 3008

Linux编程中的程序调用方法(附:自己来写个伪命令行?)

system系统调用:通过fork一个新的进程来执行参数中的命令,执行完毕返回阻塞的源程序 system("./test -a 3 -d"); execv代替调用:通过把新的程序代替源程序继续...
  • wuchunlai_2012
  • wuchunlai_2012
  • 2016年01月28日 15:38
  • 853
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:管理路由器每次要输密码真是麻烦,自己来写个浏览器
举报原因:
原因补充:

(最多只允许输入30个字)