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

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Эту мессагу я кидаю по просьбе Алекса из Самары.
Напоминаю проблемку: программа запускает инсталляцию Каспера (что мультик - полное дерьмо, что антивирус), и автоматом ее выполняет.
Мне под руку попался Каспер 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 и чего еще пожелаете, я сегодня добрый  _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
 |
|
Новая тема
Ответить
Печать
|
Вы можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете присоединять файлы в этом форуме Вы можете скачивать файлы в этом форуме
|
|