Win32 API FAQ
Страница 23.



54)----------------------------------------------------------------------------

Q> Как,зная имя и пароль пользователя и не имея привилегий для LogonUser(),

      программно проверить их на правильность?

 

A> Наиболее просто это воспользоваться NetUserChangePassword()

#include
#include
//#include
#include

#pragma comment(lib,"netapi32")

//------------------------------------------------
void main(void)
{
char UserName[MAX_PATH];
char Password[MAX_PATH];
char CompName[MAX_PATH];

char tmp[MAX_PATH];
strcpy(tmp,"\\\\");
printf("Computer:");
scanf("%s",CompName);

if(CompName[0]!='\\')
{
strcat(tmp,CompName);
strcpy(CompName,tmp);
}

printf("User Name:");
scanf("%s",UserName );

printf("Password:");

           char ch;
           UINT u=0;

       do
       {

         ch = _getch();
if(ch=='\b')
{
_putch('\b');
u--;
}
else
{
   
             if(ch!='\r')_putch( '*' );
             Password[u]=ch;
             u++;
}
       } while( ch != '\r' );
             printf("\n");
         Password[--u]=0;u=0;

           wchar_t wcompname[MAX_PATH];
           wchar_t wusername[MAX_PATH];
           wchar_t wpassword[MAX_PATH];

       mbstowcs( wcompname, CompName, strlen(CompName)+1 );
       mbstowcs( wusername, UserName, strlen(UserName)+1 );
       mbstowcs( wpassword, Password, strlen(Password)+1 );

switch(NetUserChangePassword(
wcompname,wusername,wpassword,wpassword))
{
case ERROR_ACCESS_DENIED:
           printf("The user does not have access to the requested information.\n");
           break;
case NERR_InvalidComputer:
           printf("The computer name is invalid.\n");
           break;
case NERR_NotPrimary:
           printf("The operation is allowed only on the primary domain controller of the domain.\n");
           break;
case NERR_UserNotFound:
           printf("The user name could not be found.\n");
           break;
case NERR_PasswordTooShort:
           printf("The password is shorter than required.\n");
           break;
case 0:
           printf("User Ok\n");
           break;

default:printf ("Error\n");;
}

}

55)--------------------------------------------------------------------------

Q> Как динамически прятать/показывать кнопку на таскбаре?

A>

Последовательность действий :
a) Создаем дополнительное невидимое ws_popup окно .

    m_hWnd=CreateWindowEx (NULL,TEXT("static"), TEXT(""),
                                      WS_POPUP,
                                      0,0,1600,1200,NULL,(HMENU)NULL,
                                      NULL, NULL);

b) Hужное нам окно делаем childом на этом окне .

    hMain=CreateWindowEx (NULL,TEXT("static"), TEXT("Main window"),
                                      WS_POPUP | WS_VISIBLE,
                                      40,50,200,300,m_hWnd,(HMENU)NULL,
                                      NULL, NULL);

c) Теперь спрятать кнопку -

     {
    ShowWindow(hMain,SW_HIDE);
           SetWindowLong(hMain,GWL_EXSTYLE,WS_EX_APPWINDOW);
    ShowWindow(hMain,SW_SHOW);
     }

d) Показать -

     {
    ShowWindow(hMain,SW_HIDE);
           SetWindowLong(hMain,GWL_EXSTYLE,NULL);
    ShowWindow(hMain,SW_SHOW);
     }

 
« Предыдущая статья   Следующая статья »