![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
> Или Приложение не является родителем формы?
Не является.