在一个地方需要用户填写windows用户名密码,是软件需要,为什么大家就不要追问了。用户名已经有办法获取了,可以校验用户填的用户名对不对。现在还希望能校验一下填入的这个密码对不对,如果不对要提示用户重新填写密码。请问怎么做?最好是用windows api的。多谢。

解决方案 »

  1.   

    就一个API,具体自己查MSDN~~示例代码:
    #include <iostream.h>
    #include <windows.h>#pragma comment(lib,"user32.lib")
    #pragma comment(lib,"Advapi32.lib")void main()
    {
        HANDLE  hUser;
        char    szUserName[MAX_PATH] = "administrator";
        char    szPassWord[MAX_PATH] = "visualstudio";
        
        if(LogonUser(szUserName,".",szPassWord,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hUser))
    {
    cout<<"Windows用户密码正确!"<<endl;
    }
    else
    {
    cout<<"Windows用户或密码错误!"<<endl;
    }
    }运行截图:
      

  2.   

    恩,看到了,但这样有个问题1L的大哥可能没留意!有的电脑使用的是空密码,而默认情况下windows安全策略是启用了“使用空白密码的本地帐户只允许进行控制台操作”,此时登录是失败的,GetLastError是〖1327〗-登录失败: 用户帐户限制。 wangningyu的方法对以设置了密码的windows都ok,就是没有吧空白密码的情况也纳入进来。
      

  3.   

    #include <iostream.h>
    #include <windows.h>#pragma comment(lib,"user32.lib")
    #pragma comment(lib,"Advapi32.lib")void main()
    {
        HANDLE  hUser;
        char    szUserName[MAX_PATH] = "administrator";
        char    szPassWord[MAX_PATH] = "visualstudio";
        
        bool bret = LogonUser(szUserName,".",szPassWord,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hUser);
        if (!bret && (strlen(strPassWord == 0) && (GetLastError()==1327) ))
             bret = true;
        if(bret)
        {
            cout<<"Windows用户密码正确!"<<endl;
        }
        else
        {
            cout<<"Windows用户或密码错误!"<<endl;
        }
    }OK
    logonuser方法是1L大侠提供的,大家感谢他吧!