Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вставка в окно Логина и пароля.

1.8K
26 ноября 2003 года
SeregaLBN
62 / / 03.10.2003
Есть MFC SDI приложение, в котором на CFormView вставлена ActiveX компонента IE browser.
При старте проги я стразу обращаюсь на свой веб-сервер, который предлагает мне ввести логин и пароль. Так вот - это мне надо автоматизировать, благо логин и пароль я знаю; окно, куда их надо вставить, найти я могу.
Проблема заключается вот в чём. Под WinXP всё полуается, а под Win200 - нет :)
Я выполняю это так:

1. Под XP.
Ищу окно с заголовком "Connect to <IP адрес Web сервера>".
Ищу на данном окне контролы логина и пароля, и вставляю туда логин и пароль.
Посылаю кнопке [Ok] собщение о клике.

CString strIP_address = TEXT("11.22.33.44"); // строка содержит адрес web сервера
CString strCaption = TEXT("Connect to ");
strCaption += strIP_address;

HWND hWnd_Connect = FindWindow(TEXT("#32770"), strCaption);

if (hWnd_Connect) {
HWND hWnd_User = GetDlgItem(GetDlgItem(hWnd_Connect, 1002), 1003); // окно Логина
HWND hWnd_Pass = GetDlgItem(GetDlgItem(hWnd_Connect, 1002), 1005); // окно Пароля

TCHAR szBuffUser[64];
GetWindowText(hWnd_User, szBuffUser, 64); // в szBuffUser будет содержаться старый Логин
TCHAR szBuffPass[64];
GetWindowText(hWnd_Pass, szBuffPass, 64); // в szBuffPass будет содержаться старый Пароль

// вставляю логин и пароль
SetWindowText(hWnd_User, TEXT("UserName"));
SetWindowText(hWnd_Pass, TEXT("UserPassword"));

// Посылаю кнопке [Ok] собщение о клике
SendMessage(GetDlgItem(hWnd_Connect, IDOK), BM_CLICK, 0L, 0L);
}

Всё работает - всё великолепно.
Если посмотреть (до вставки моих данных) что за текст содержится и окошках логина и пароля, то можно увидеть (если они, конечно, вообще есть на окне) и логин и пароль.


2. Под Win2000.
Ищу окно с заголовком "Enter Network Password"
Ищу на данном окне контролы логина и пароля, и пытаюсь вставить туда логин и пароль.
Так вот - окно нашел, а вставить текст не получается. Что интересно, выброрка значений уже существующих (отображамых) на окне логина и пароля тоже неполучается. Хотя все функции отрабатываются без ошибок...

HWND hWnd_Connect = FindWindow(TEXT("#32770"), TEXT("Enter Network Password"));
if (hWnd_Connect) {

HWND hWnd_User = GetDlgItem(hWnd_Connect, 1218); // окно Логина
HWND hWnd_Pass = GetDlgItem(hWnd_Connect, 1219); // окно Пароля

BOOL res;
DWORD errCode;
TCHAR szBuffUser[64];
res = GetWindowText(hWnd_User, szBuffUser, 64); // в szBuffUser _нет_ старого Логина
if (!res)
errCode = GetLastError();
TCHAR szBuffPass[64];
res = GetWindowText(hWnd_Pass, szBuffPass, 64); // в szBuffPass _нет_ старого Пароля
if (!res)
errCode = GetLastError();

// вставляю логин и пароль
res = SetWindowText(hWnd_User, TEXT("UserName"));
if (!res)
errCode = GetLastError();
res = SetWindowText(hWnd_Pass, TEXT("UserPassword"));
if (!res)
errCode = GetLastError();

// Посылаю кнопке [Ok] собщение о клике
//SendMessage(GetDlgItem(hWnd_Connect, IDOK), BM_CLICK, 0L, 0L);
}

Я уже не раз убеждался (с помощью ф-ций EnumChildWindows GetClassName GetWindowText GetWindowLong(hwnd, GWL_ID)) что все найденные окна именно те окна которые мне нужны...
Подскажите, плз, где кроются грабли...

PS: В диалоговом окне (для ввода логина и пароля) можно поставить руками галочку для запоминания логина и пароля, для того чтобы в дальнейшем достaточно было нажать только кнопку [Ok].
Так вот, когда я (под Win2000) кидаю этой кнопке сообщение о клике (не пытаясь вставить логин и пароль), диалог закрывается. И ... всё - результата вообще никакого, браузер кудато лезет и лезет...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог