Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FindWindowEx


Андрей Молчанов ©   (2005-08-01 16:58:00) 

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

Мне нужно найти сначала приложение, а потом форму в нем.
Пишу:
 var
   wnd, appwnd: HWND;
begin
   appwnd := FindWindow('TApplication', PChar(Application.Title));
   if appwnd <> 0 then
     wnd := FindWindowEx(appwnd, 0, 'TfrmMain', nil);


Само приложение он находит, а форму - нет. Или Приложение не является родителем формы? Но тогда как найти по имени класса форму в приложении?
Пожалуйста, помогите!


Андрей Молчанов   (2005-08-01 22:48:00) [1]

Решение найдено. Спасибо всем принимавшим участие в дискуссии.


Андрей Молчанов   (2005-08-01 19:06:00) [2]

Ну пожалуйста, помогите!
Цель - по существующему Title приложения и имени класса формы, найти хэндл этой формы в этом приложении.


Андрей Молчанов   (2005-08-01 18:08:00) [3]


> Сам себе злобный буратино. Почему бы не искать по Application.MainForm.ClassName?

Потому что
1. Нужная мне форма не всегда главная.
2. Менять класс в зависимости от DEFINE не хочется.

Вообще, по-моему, я плохо объяснил, что хочется:
Надо, чтобы в зависимости от DEFINE создавались 2 одинаковых проекта, но каждый при повторном запуске пересылал командную строку в СВОЮ прежнюю копию.


Игорь Шевченко   (2005-08-01 17:50:00) [4]


> Теперь понадобилось создавать несколько приложений из одного
> проекта.


> Это нужно, чтобы при запуске второго экзэмпляра приложения,
> переслать сообщение в первый


Сам себе злобный буратино. Почему бы не искать по Application.MainForm.ClassName ?


Андрей Молчанов   (2005-08-01 17:45:00) [5]

Ага, вот только про мой случай [6] там нет :(


BiN   (2005-08-01 17:33:00) [6]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1121182970&n=5


Андрей Молчанов   (2005-08-01 17:26:00) [7]


> Сделать форму с именем 'TfrmMySuperMain', например

Раньше я так и делал. Теперь понадобилось создавать несколько приложений из одного проекта. То есть сначала скомпилировать с {DEFINE OriginalVersion}, а потом без. Но чтобы отлавливались в одном приложении одна форма, а в другом другая. Это нужно, чтобы при запуске второго экзэмпляра приложения, переслать сообщение в первый.

Может есть какие-нибудь функции вроде GetApplicationForm?


GLFox   (2005-08-01 17:22:00) [8]

Если лень перименовывать TfrmMain можно проверить на наличие какого нибудь специфичного дочернего класса у него, например TMyUniqueLabel1, а лучше Caption...
Но, конечно, проще как сказал Игорь Шевченко © (01.08.05 17:16) [4]


Игорь Шевченко   (2005-08-01 17:16:00) [9]

Андрей Молчанов   (01.08.05 17:15) [3]


> А как тогда быть?


Сделать форму с именем 'TfrmMySuperMain', например


Андрей Молчанов   (2005-08-01 17:15:00) [10]

А как тогда быть? То есть надо найти форму в определенном приложении. А то 'TfrmMain' много где бывает.


GLFox   (2005-08-01 17:07:00) [11]

Вообще то, если посмотреть приложение хотя бы тем же Microsoft Spy++, то можнол заметить, что главная форма не является доченим окном TApplication. Так что стоит указывать предком 0 во втором случае.


Игорь Шевченко   (2005-08-01 17:05:00) [12]


> Или Приложение не является родителем формы?


Не является.


Наверх

Титульная страница Поиск, карта сайта Написать письмо