Вставка в окно Логина и пароля.
При старте проги я стразу обращаюсь на свой веб-сервер, который предлагает мне ввести логин и пароль. Так вот - это мне надо автоматизировать, благо логин и пароль я знаю; окно, куда их надо вставить, найти я могу.
Проблема заключается вот в чём. Под 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) кидаю этой кнопке сообщение о клике (не пытаясь вставить логин и пароль), диалог закрывается. И ... всё - результата вообще никакого, браузер кудато лезет и лезет...