Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2010, 09:13   #1
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию Проблема с SendMessage

Суть такова: В окно авторизации чужой программы отсылаю в окно логина и пароля свои данные через SendMessage.Сначала получаю хэндлы этих окон и название класса (эдитов). Всё нормально отправляется но вот пишет прога что пароль введён не верно, хотя пробовал считать обратно текст окна и ведь пароль то правильный

Список свех компонентов на чужой форме и название их классов получаю следующим образом
Код:
Procedure GetSubChild(MainH:HWND; HList:TStringList);
Var ChildH:HWND;			 
    ClNameCH:array[0..255] of Char;
      NameCH:array[0..255] of Char;
begin
 if MainH=0 then Exit;
 ChildH:=FindWindowEx(MainH,0,nil,nil); 
 while (ChildH <> 0) do		     // Есть еще что искать ?
    begin
     GetClassName(ChildH,ClNameCH,255);
     GetWindowText(ChildH,NameCH,255);
    //Заносим в стринг лист Хэндл Имя класса Надпись(если таковая имеется)
     HList.Add(IntToStr(ChildH)+':'+ClNameCH+'|'+NameCH);
     Application.ProcessMessages;
     GetSubChild(ChildH,HList);
     ChildH:=FindWindowEx(MainH,ChildH,nil,nil);
    end;
end;
Далее отправляем логин и пароль + выбираем вход под главным админом (выбирается из комбобокса). После этого имитируем нажатие на кнопку ОК
Код:
procedure TForm1.Button1Click(Sender: TObject);
var H:HWND;
    SL:TStringList;
    i:integer;
begin
 SL:=TStringList.Create;
 H:=FindWindow(nil,'Введите имя пользователя и пароль (1.10.8)');
// H:=FindWindow(nil,'Form1');
 GetSubChild(H,SL);
 Listbox1.Items.Assign(SL);
 for i:=0 to SL.Count-1 do
 begin
  if Pos('TEdit',SL[i])<>0 then
   if Pos('localhost',SL[i])=0 then
   SendMessage(StrToInt(Copy(SL[i],1,Pos(':',SL[i])-1)),WM_SETTEXT, 0,LParam(PCHar('ADMIN')));//вот здесь и отправляем логин и пароль (ADMIN ADMIN)
  if Pos('TComboBox',SL[i])<>0 then
  SendMessage(StrToInt(Copy(SL[i],1,Pos(':',SL[i])-1)),CB_SETCURSEL,Integer(2),0);
  if Pos('TBitBtn',SL[i])<>0 then
   if Pos('OK',SL[i])<>0 then
   begin
    SL.Free;
    SendMessage(StrToInt(Copy(SL[i],1,Pos(':',SL[i])-1)),BM_CLICK,0,0);
    exit;
   end;
 end;
end;
Причём если стереть пароль и ввести вручную то нормально
SERG1980 вне форума Ответить с цитированием
Старый 09.07.2010, 09:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кстати а каков класс окна которому ты отправляешь текст?

P.s. Пардон затупил SendMessage правильне чем postMessage
I'm learning to live...

Последний раз редактировалось Stilet; 09.07.2010 в 09:38.
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 09:53   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Класс TEdit
SERG1980 вне форума Ответить с цитированием
Старый 09.07.2010, 10:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я с похожей проблемой сталкивался одной системе.
Там помимо ввода в Эдит нужно было послать символ Энтера... Может и у тебя похожая проблема?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 10:38   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

С ентером не прокатило. Попробовал своё окно авторизации сделать, послал пароль, всё нормально. Может как то по мудрёному пароль сравнивается. Причём в блокноте пишу слово admin поотм копирую (ctrl+c ctrl+v) в окна то нормально
После нажатия на ОК идёт подключение к БД FireBird. я так думаю сравнение данных идёт из бд, может после пердачи пароля через SendMessage кодировка меняется и приплыли не этом
Вот окно этой проги.
Изображения
Тип файла: jpg Безымянный.JPG (14.8 Кб, 66 просмотров)

Последний раз редактировалось SERG1980; 09.07.2010 в 10:53.
SERG1980 вне форума Ответить с цитированием
Старый 09.07.2010, 10:56   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SERG1980
А ты попробуй (на всякий случай) посимвольно через WM_CHAR вводить.
Мало ли какое сообщение оно обрабатывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 11:16   #7
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Это как придётся через цикл чтоли ?
Вообщем и так не хочет работать

Последний раз редактировалось SERG1980; 09.07.2010 в 11:30.
SERG1980 вне форума Ответить с цитированием
Старый 09.07.2010, 11:24   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
через цикл чтоли ?
Ага. Именно это я и имею ввиду. Прям как будто руками посимвольно вводить.
Мож там проверка пароля как раз срабатывает только в этом случае.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 11:43   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Вообщем Stilet спасибоныч тебе разобрался именно по чару передавал и сначала надо было вводить логин а потом пароль а у меня в цикле первым заполнялось окно пароля. не знаю какая разница но работает. К сожалению почему то не могу тебе поставить плюсик
SERG1980 вне форума Ответить с цитированием
Старый 09.07.2010, 11:56   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SERG1980
Незачто, я и сам не знаю в чем прикол, но сталкивался уже с такими программами.
Теперь всегда только WM_CHAR использую - надежнее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры SendMessage Jenya Win Api 4 11.12.2010 19:15
SendMessage ASЯ Помощь студентам 0 20.05.2010 10:38
работа с SendMessage rekrow Общие вопросы Delphi 9 25.11.2009 13:48
Проблемы с SendMessage Ronder Помощь студентам 6 27.08.2009 22:06