Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

FindWindowEx   Найти похожие ветки 

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

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

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


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


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


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


Не является.


 
GLFox ©   (2005-08-01 17:07) [2]

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


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

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


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

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


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


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


 
GLFox ©   (2005-08-01 17:22) [5]

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


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


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

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

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


 
BiN ©   (2005-08-01 17:33) [7]

http://delphimaster.net/view/4-1121182970/


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

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


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


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


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


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


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


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

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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.095 c
14-1125968559
vidiv
2005-09-06 05:02
2005.09.25
Как принтер так печатает?!


1-1125862322
ArtemESC
2005-09-04 23:32
2005.09.25
"Выкомпилировать" функцию


14-1125776112
xivs
2005-09-03 23:35
2005.09.25
Недостаточно места на диске....


1-1125495154
Erik1
2005-08-31 17:32
2005.09.25
Вызов API функции после CoInitializate?


14-1124491610
Andy BitOff
2005-08-20 02:46
2005.09.25
Google map, помните?