编程实现自动填充Outlook 2010登录密码并登录

1. 问题或需求描述:
使用 outlook 2010遇到无法保存密码自动登录的情况(又或者是,想实现用资源管理器快速打开ftp空间等等,本文对你或许有所帮助)

2.解决方法或原理:
使用C/C++语言编程实现,核心是消息模拟,用消息(Message)来模拟用户正常的按键与鼠标操作。

3.开发环境:
WIN10 + VS2017

4.主要源码:

C/C++代码:

#include "stdafx.h"
#include "MailLogger.h"
#include <Shellapi.h>

BOOL CALLBACK MyEnumChildFunc(HWND _hwnd, LPARAM _lParam);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    HWND hWnd = NULL;
    unsigned iTime = 0;

    //运行 outlook
    ShellExecute(NULL, L"open", L"C:\\Program Files\\Microsoft Office\\Office14\\OUTLOOK.EXE", NULL, NULL, SW_SHOW);
    //30秒内进行授权登陆
    while (iTime < 60)
    {
        hWnd = FindWindow(L"#32770", L"Windows 安全");
        if (hWnd != NULL) break;
        iTime++;
        Sleep(500);
    }
    if (hWnd == NULL) return 1;
    Sleep(500);
    EnumChildWindows(hWnd, MyEnumChildFunc, NULL);
    return 0;
}

VOID FillPwd(HWND _hwnd)
{
    char pwd[32] = "password";

    PostMessage(_hwnd, WM_SETFOCUS, (WPARAM)0x00000000, (LPARAM)0x00000000);    //Set focus
    PostMessage(_hwnd, WM_KEYDOWN, (WPARAM)0x00000024, (LPARAM)0x01470001);     //home key
    PostMessage(_hwnd, WM_KEYUP, (WPARAM)0x00000024, (LPARAM)0xC1530001);
    //足够多的Del以清空原有内容(可能是过期或失效的密码)
    for (int i=0; i<32; i++)
    {
        PostMessage(_hwnd, WM_SETFOCUS, (WPARAM)0x00000000, (LPARAM)0x00000000);    //Set focus
        PostMessage(_hwnd, WM_KEYDOWN, (WPARAM)0x0000002E, (LPARAM)0x01530001);     //del key
        PostMessage(_hwnd, WM_KEYUP, (WPARAM )0x0000002E, (LPARAM)0xC1530001);
        Sleep(5);
    }
    for (int i=0; i< strlen(pwd); i++)
    {
        PostMessage(_hwnd, WM_SETFOCUS, (WPARAM)0x00000000, (LPARAM)0x00000000);    //Reset focus
        PostMessage(_hwnd, WM_CHAR, (WPARAM)(pwd[i] & 0xFF), (LPARAM)0x00000000);
        Sleep(5);
    }
    PostMessage(_hwnd, WM_CHAR, (WPARAM) 0x0000000D, (LPARAM)0x011C0001);   //enter key
}

BOOL CALLBACK MyEnumChildFunc(HWND _hwnd, LPARAM _lParam)
{
    TCHAR szWindowClass[256], szWindowName[256];
    LONG windowStyle;

    GetWindowText(_hwnd, szWindowName, 256);
    GetClassName(_hwnd, szWindowClass, 256);
    if (wcscmp(szWindowClass, L"Edit") == 0 && wcscmp(szWindowName, L"") == 0)
    {
        windowStyle = GetWindowLong(_hwnd, GWL_STYLE);
        if (windowStyle & ES_PASSWORD)
        {
            FillPwd(_hwnd);
        }
    }
    return TRUE;
}

原文地址:http://blog.51cto.com/firswof/2123563

时间: 2024-08-02 22:31:11

编程实现自动填充Outlook 2010登录密码并登录的相关文章

【整理】14. 禁止自动填充浏览器记住的密码?

怎么禁止自动填充浏览器记住的密码? 原因:chrome 自动回填/选择历史提示 会导致黄色背景:一个不常用的个性定制的登陆界面,懒的修改样式,所以牺牲功能. 解决办法: 方式一: <input type="password" name="pwd" style="display:none"> <input type="password" name="pwd" placeholder=&quo

html页面禁止自动填充浏览器记住的密码

现在的浏览器功能越来越强大,比如Chrome浏览器,在一个系统login的时候我们一般会记住密码,那么在整个系统中,浏览器一旦遇到 type="password"的控件,就会把密码自动填充到该控件.非常烦恼,问了一下同事有人说可以用autocomplete="off" 来禁用自动填充, 经过简单的实践没有达到我的需求.于是回到最原始的解决方案.比如html如下 <input type="password"  name="admin

Vue+element 解决浏览器自动填充记住的账号密码问题

我们在做form表单的时候,会发现,浏览器会自动的将我们之前保存的密码, 自动的填充到表单中input 为 type="password" 的框中 登录页面也就算了,但是注册页面就很难受了,有一种不受控制的感觉 不行,我的代码必须由我控制,下面是解决方案: 解决方法:只需要在每个input框前面加一个input,同时将其隐藏,就ok了,账号那个需要放在下面,原因不详... 原文地址:https://www.cnblogs.com/jun-qi/p/11002850.html

一行代码,阻止浏览器自动填充密码

使用Chrome.Firefox,还有360和搜狗等浏览器,在某个网站进行提交表单的操作时,浏览器会提示是否保存密码 如果选择了保存密码,之后在浏览这个网站的任何一个有密码输入框的的表单时,浏览器会把上次保存过的账号和密码自动填入到表单中,输入框的背景变成黄色 只是登录页面自动填充的话倒没有什么问题,但是网站任何一个地方的表单都会自动填充,这就会带来很多不必要的麻烦,比如注册页面:如果表单涉及到资金方面的数据提交,可能会给用户不安全的感觉.       如果你是一个前端工程师,可能会想屏蔽浏览器

如何禁止表单用户名、密码自动填充(转载)

如何禁止(表单)用户名.密码自动填充 BY JACKSUN · 2014年11月21日 Html登录表单经常被自动填充,有的甚至用户从来没有登录过的网站也会有自动填充,甚是让人讨厌. Mozilla 官方文档建议 Mozilla developer documentation 建议使用表单设置属性 tautocomplete=”off” 来阻止浏览器从cache获取数据填充登录表单. 1 <input type="text" name="foo" autoco

网页自动登录,自动填充表单代码

实现自动登录某网站,并且登录完成后跳转到指定的页面.然后进行表单的自动填充表单提交 .类型于小型的发帖机 哈哈 (看官在看下面代码的时候,把记得把下面的链接改下) public partial class Form1 : Form { public Form1() { InitializeComponent(); webBrowser1.Navigate("www.tiantianit.com"); } private void webBrowser1_DocumentComplete

用户登录记住用户名导致表单自动填充bug解决方法

最近做项目出现了一个极其讨厌的bug:在用户登录网站时,浏览器会自动提示是否记住密码,当选择记住密码时,正常浏览网页,会发现有那么几个input输入框会自动填充用户名,非常讨厌, 于是就觉得挺简单的一个bug,想了几种解决办法: 方法一:利用html5表单新增属性 autocomplete="off",刷新后尝试,并没有卵用: 方法二:利用js来控制,进入页面时,给input表单设置value为空,心想这下可以了吧,结果还是没毛用: 方法三:给input表单设置只读属性 readonl

Chrome 无法自动填充密码

问题: chrome 同步一切正常,在密码管理器https://passwords.google.com 也能看到自己保存的密码 但是在 设置 - 密码中看不到保存的密码,只能看到 “一律不保存” 的网站,登录网站的时候密码无法自动填充 退出chrome帐号并重新登录不管用 解决: 参考:https://www.v2ex.com/t/255542 15楼 点击右上角头像 - 管理用户 - 移除此用户 - 之后再登录就好楼 原文地址:https://www.cnblogs.com/tanrong/

浏览器保存密码后自动填充问题

问题描述 在浏览器中进行登录操作时浏览器往往会问我们是否需要记住密码,当我们点击了记住密码后,发现浏览器会自动填充此域名下已经保存的账号密码,给用户带来不便.加了HTML5 中的新属性autocomplete="off" ,但是并没有产生效果. 浏览器自动填充机制 反复测试后发现浏览器自动填充机制是满足:页面里有一个type=password的input且这个input前面有一个type=text的input的时候就会进行自动填充.firefox和360浏览器的处理方式是:只要检测到页