Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.042 c
14-1125268629
Мир
2005-08-29 02:37
2005.09.25
Что означает "absolute", и почему он не работает?


14-1124830002
ronyn
2005-08-24 00:46
2005.09.25
Объявление в газете "Требуется программист delphi"....


6-1117516750
leonidus
2005-05-31 09:19
2005.09.25
Как в TWebBrowser`e сменить кодировку загруженного документа


1-1125745385
RzCoDer
2005-09-03 15:03
2005.09.25
создание TBitmap из нескольких


4-1122801708
Pasha L
2005-07-31 13:21
2005.09.25
Как получить список запущенных приложений




   Наверх