Delphi - Закрыть незакрываймое окно!

Аватара пользователя
D@n1k007

Delphi - Закрыть незакрываймое окно!

Сообщение D@n1k007 »

Здравствуйте!

Недавно снова установил Alcohol 120%. Мне стало интересно как закрыть окно приветствия в нем, то которое типо "О программе" и висит 10 секунд?

Как я выяснил окно это - дочернее и пока не пройдет счетчик (10 секунд ожидания) окно не закроется. Попробовал написать так:



Код:

Код: Выделить всё

PostMessage(FindWindow(nil, 'О программе - Alcohol 120%'), wm_quit, 0, 0);

Окошко закрылось, но вмести с ним закрылась и все прога (главное окно появилось на экране и тут же пропало)

Что можете посоветовать? Отдельная просьба не высказывать предложения по установке креков и покупки лицензии на Alcohol 120%! Я не собираюсь ломать Alcohol 120% (меня устраивает 15-дневный пробный период) мне это нужно как полигон для обучения!

Заранее благодарен!!!
Аватара пользователя
Admiral

Re: Delphi - Закрыть незакрываймое окно!

Сообщение Admiral »

D@n1k007, PostMessage в альянсе с параметром wm_quit как раз и отправляют процессу, а не отдельно взятому окну, команду закончить работу.

Данное ПО не установлено, так что не проверял. А что если отправить сообщение одноимённой функцией SendMessage с параметром WM_CLOSE?

SendMessage(FindWindow(nil, 'О программе - Alcohol 120%'), WM_CLOSE, 0, 0)
Аватара пользователя
pva

Re: Delphi - Закрыть незакрываймое окно!

Сообщение pva »

кнопка посылает WM_COMMAND: wparam=ID, lparam=hwnd. Дальше первый поймавший сообщение находит у приславшего указатель на TControl и отправляет ему обратно сообщение CM_COMMAND ( = 0x3000 + WM_COMMAND), которое и обрабатывается самой же кнопкой (её обёрткой VCL).

Скорее всего таймер использует сообщение WM_TIMER. Если при этом для вычисления оставшегося кол-ва секунд используется формула GetTickCount() - start_time (а таймер только для обновления экрана), то фокус не прокатит. Если используется аргумент wparam сообщения WM_TIMER, то достаточно один раз послать WM_TIMER с wparam=GetTickCount()+8000. Если сообщение таймера используется для увеличения счётчика (на единицу), значит надо послать сколько нужно раз это сообщение. Ещё можно изменить период таймера функцией SetTimer. В любом случае понадобится ID таймера и параметр lparam, который он использует, а их можно узнать только поймав "родное" сообщение WM_TIMER.
Аватара пользователя
Admiral

Re: Delphi - Закрыть незакрываймое окно!

Сообщение Admiral »

или просто спрятать его:

ShowWindow(FindWindow(nil, 'О программе - Alcohol 120%'), SW_HIDE);
Аватара пользователя
D@n1k007

Re: Delphi - Закрыть незакрываймое окно!

Сообщение D@n1k007 »

Код:

Код: Выделить всё

SendMessage(FindWindow(nil, 'О программе - Alcohol 120%'), WM_CLOSE, 0, 0);

не работает пока не закончится таймер



Код:

Код: Выделить всё

ShowWindow(FindWindow(nil, 'О программе - Alcohol 120%'), SW_HIDE);

только скрывает, а не закрывает окно (следовательно главное окно не откроется)

Вот блин головоломку придумал Изображение
Аватара пользователя
crashtuak

Re: Delphi - Закрыть незакрываймое окно!

Сообщение crashtuak »

Цитата D@n1k007:



Отдельная просьба не высказывать предложения по установке креков и покупки лицензии на Alcohol 120%!
Delphi - Закрыть незакрываймое окно!




А*предложения по установке бесплатной версии Alcogol 52% (в которой отсутствуют функции записи дисков)?
Аватара пользователя
El Scorpio

Re: Delphi - Закрыть незакрываймое окно!

Сообщение El Scorpio »

2 El Scorpio

Звучит нелепо, но смыл не в том чтобы пользоваться Alcohol , смысл в том чтобы закрыть это окно! Изображение Я же писал выше
Цитата D@n1k007:



мне это нужно как полигон для обучения
Delphi - Закрыть незакрываймое окно!




У меня появилась идея, только возник ряд проблем и без помощи мне не обойтись:



Код:

Код: Выделить всё

var h1, h2: hwnd;
...
begin
  h1 := FindWindow(nil, 'О программе - Alcohol 120%');
  h2 := FindWindowEx(h1, 0, 'TButton', '&OK');
  showmessage(inttostr(h2));
end;

Этим кодом я хочу найти кнопку ОК, но при попытке ее найти всегда возвращается 0. Пробовал печатать - "ОК" и по-русски и по-английски, пробовал получать ответ когда кнопка пассивна и активна, результат всегда 0 Изображение

Что я делаю не так? (Пробовал с другим приложением тоже не смог найти кнопку)[/i]

Прилагаю картинки!
Аватара пользователя
pva

Re: Delphi - Закрыть незакрываймое окно!

Сообщение pva »

1) А сначала TPanel если поискать (а на нём TButton)?

2) Победил таймер?

ничё у тебя оперативки то! hypernate.sys наверное половину загрузочного раздела занимает Изображение
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

[Расширение jpg было запрещено, вложение больше недоступно.]

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
pva

Re: Delphi - Закрыть незакрываймое окно!

Сообщение pva »

Цитата D@n1k007:



Этим кодом я хочу найти кнопку ОК, но при попытке ее найти всегда возвращается 0. Пробовал печатать - "ОК" и по-русски и по-английски, пробовал получать ответ когда кнопка пассивна и активна, результат всегда 0
Delphi - Закрыть незакрываймое окно!




А*если циклом считать текстовые свойства всех экранных элементов?

Глядишь, что-нибудь интересное найдётся.
Аватара пользователя
El Scorpio

Re: Delphi - Закрыть незакрываймое окно!

Сообщение El Scorpio »

Сейчас расскажу суть моей идеи:

Я хотел с помощью кода, приведенного ниже, активировать кнопку ОК, в надежде что нажав на нее окно закроется, но увы... Кнопка стала активной, окно не закрылось! Изображение



Код:

Код: Выделить всё

begin
h1 := FindWindow(nil, 'О программе - Alcohol 120%');
h3 := FindWindowEx(h1, 0, 'TPanel', nil);
h2 := FindWindowEx(h3, 0, 'TButton', nil);
EnableWindow(h2, true);
end;

2 El Scorpio


Цитата El Scorpio:



А*если циклом считать текстовые свойства всех экранных элементов?
Delphi - Закрыть незакрываймое окно!




Как это? Я еще не очень опытный в программировании, вы могли бы рассказать подробнее?



2 ALL

1. Как победить таймер? Как его можно поставить в значение 0? Может есть какие-то свойства/сообщения/доп. параметры для команды WM_TIMER (вообще уместно ли ее тут использовать)?

2. Можно ли узнать сообщение которое кнопка ОК посылает окну?
Ответить

Вернуться в «Программирование и базы данных»