Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


Как управлять с помощью сообщений


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСб, 23-Ноя-2002 15:48    Заголовок сообщения: Как управлять с помощью сообщений
Цитата

Эту мессагу я кидаю по просьбе Алекса из Самары.
Напоминаю проблемку: программа запускает инсталляцию Каспера (что мультик - полное дерьмо, что антивирус), и автоматом ее выполняет.
Мне под руку попался Каспер 1999 года разлива и 131 сборки (где-то был еще и Каспер 4.0, но диски перекапывать лень).
В-общем, софт из себя представляет форму с одной-единственной кнопкой. Ну и текст модуля:
Код:

function ef(h:THandle;wparam:integer):boolean;stdcall;
var
  h1:THandle;
  s:string;
begin
  s:='Типа серийный номер';
  if wparam<>5 then begin
    SendMessage(h,WM_COMMAND,wparam,0);//Типа сообщаем диалогу, что мы нажали
  end else begin
    h1:=FindWindowEx(h,0,'Edit',nil);  //Ищем третий по счету Edit и вводим в него текст
    h1:=FindWindowEx(h,h1,'Edit',nil);
    h1:=FindWindowEx(h,h1,'Edit',nil);
    SendMessage(h1,WM_SETTEXT,0,cardinal(s));
  end;
  result:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  h:THandle;
begin
  h:=FindWindow('GLBSWizard',nil);  //Ищем окно
  if h=0 then begin
    ShowMessage('Врешь, мой Каспер не запущен!');
    exit;
  end;
  Button1.Caption:='Щаз нажму!';
  Sleep(1000);//Это чтобы было время прочувствовать
  EnumChildWindows(h,@ef,3);
  {Как видно на снимке WinSight, у окна GLBSWizard дочернее окно
  имеет класс с диким названием #32770:Dialog. Однако FindWindowEx
  это окно активно не хочет находить. Поэтому мы воспользуемся
  чуть более сложной функцией EnumChildWindows}
  Button1.Caption:='Щаз еще раз нажму!';
  Sleep(1000);//Это чтобы было время прочувствовать
  h:=FindWindow('GLBSWizard',nil);
  EnumChildWindows(h,@ef,4);
  Button1.Caption:='Щаз введу номер!';
  Sleep(1000);//Это чтобы было время прочувствовать
  h:=FindWindow('GLBSWizard',nil);
  EnumChildWindows(h,@ef,5);
  Button1.Caption:='И еще нажму!';
  Sleep(1000);//Это чтобы было время прочувствовать
  h:=FindWindow('GLBSWizard',nil);
  EnumChildWindows(h,@ef,6);
end;
Программа, конечно, не выполняет всю установку - она пару раз нажимает "Далее", вводит типа серийный номер, и снова нажимает "Далее". Просто этого примера достаточно, чтобы довести софт до ума.
Setup, понятное дело, сначала нужно запустить ручками. Ну а апологеты тотальной автоматизации, я надеюсь, уже освоили хотя бы WinExec :)

Если будут вопросы - задавайте. Могу также закачать скриншоты WinSight и чего еще пожелаете, я сегодня добрый :)

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100