:: Visual Foxpro, Foxpro for DOS
Re: как перехватить messagebox?
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Значит я зря кушаю свой хлеб
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
krin

Сообщений: 172
Дата регистрации: 08.02.2005
of63
А что за "хук", ты упомянул?

Herman Tan's Blog
Centering / Customize VFP MessageBox in any Form

hermantan.blogspot.com
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Это, конечно, не хук, но по крайней мере сей вариант обходится без сишных/ассемблерных вставок


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Igor Korolyov
Ещё раз по простому - если разраб не в состоянии обеспечить точную идентификацию "2 запущенных копий программы" (если это соответствует бизнес задаче - т.е. заранее предполагается запуск 2-3 или 100500 копий, как, к примеру, офисные программы работают), а потом ещё и обеспечить идентификацию их внутренних окон - как диалоговых так и всех прочих, то он зря кушает свой хлеб.
Размещение всего "внутри главного окна" это лишь один из вариантов решения вопроса "связывания воедино" разных окон относящихся к одному экземпляру программы - довольно распространённый но далеко не единственнный.

Не понял про офисные программы (типа Экселя, например). Они как раз не дают открыть один и тот же файл, кричат, что уже открыт. И не дают открыть два одинаковых файла, которые лежат в разных директориях. Непонятный отсыл к "офисным" прогам.

И про "обеспечить точную идентификацию 2 запущенных копий программы", HWND обеспечивает, сама же винда. И я могу дообеспечить, что-нибудь уникальное положить в какое-нибудь свойство _VFP, и что мне дальше делать с этим свойством... Где-то я читал про ID процесса, и поиска его родителя, в винде (ведь в ней у каждого окна есть свой ИД? и у каждого из них есть окно-родитель?). Думал, что все этим пользуются каждый день, или через день )

Вобщем, суть такая:
- я запускаю фоксовое приложение EXE
- из него запускаю такое-же приложение EXE (или просто нативный MESSAGEBOX)
- как найти второе приложение из первого, запущенное первым же!

Ссылку с кодом на фоксе посмотрел, и ничего не понял ("нам бы схемку иль чертеж" ), в ссылке не по-нашему, и много строк. Идея то вроде должна в АПИ просто поддерживаться, чтобы строить дерево ИД процессов, чтобы знать кто кого запустил, и корневой ИД фокс может знать наверняка, и были эти коды давно на форуме (или что-то похожее). И не на ассемблере/Си вроде, а на АПИ (вроде)

Ладно, это не нужно, на самом деле, для удовлетворения эльки, это для операторов, а они и так перебьются. Скажешь им, что "зажгется лампа красная - нажми кнопку черную", они и удовлетворятся )
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Не понял про офисные программы (типа Экселя, например). Они как раз не дают открыть один и тот же файл, кричат, что уже открыт. И не дают открыть два одинаковых файла, которые лежат в разных директориях. Непонятный отсыл к "офисным" прогам.
Вполне понятный - они не дают юзеру поставить себя в такой тупик - всегда видно что за документ в работе - в заголовке окна к примеру.
of63
И про "обеспечить точную идентификацию 2 запущенных копий программы", HWND обеспечивает, сама же винда.
Никаких HWND пользователь не видит. А окна, в т.ч. и их заголовки - вполне.
of63
Вобщем, суть такая:
- я запускаю фоксовое приложение EXE
- из него запускаю такое-же приложение EXE (или просто нативный MESSAGEBOX)
- как найти второе приложение из первого, запущенное первым же!
Зачем? Не вижу смысла всего этого.
Для связывания того же MB с вызвавшим его "окном приложения" можно не только "центрировать MB в окне" - что делается несколько замороченно - вполне достаточно в заголовке MB повторить заголовок окна твоего приложения. Естественно чтобы это работало, твоё приложение должно на каждый параллельный запуск делать уникальный заголовок - и тут как раз ворд тебе в пример. Да, он не запретит открыть "письмо 1239-8764-5а от 16.10.18" одновременно с "письмо 1239-8674-5а от 16.10.18", но по крайней мере пытается идентифицировать разные копии (не суть важно что процесс там обычно один, но окна верхнего уровня таки разные). Да, в мультимониторной конфигурации всё уже несколько хуже - "подчинённый" диалог показанный на "другом экране" не очень хорошее UI решение... Хотя бывают разные случаи
of63
Ссылку с кодом на фоксе посмотрел, и ничего не понял
Увы, ничем не могу помочь в данном случае. Замечу лишь что никаких "деревьев процессов" и "кто кого запустил" там нет от слова вообще. Банально окна ловятся в рамках одного процесса - ну так чего и хотели ж


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> вполне достаточно в заголовке MB повторить заголовок окна твоего приложения
Я тебя понял. Мы живем в разных мирах )

> Для связывания того же MB с вызвавшим его "окном приложения" можно не только "центрировать MB в окне" - что делается несколько замороченно - вполне достаточно в заголовке MB повторить заголовок окна твоего приложения.

Дурак ты, ей богу Извиняюсь, Игорь )



Исправлено 3 раз(а). Последнее : of63, 17.10.18 08:46
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 29 (Гостей: 29)

© 2000-2024 Fox Club 
Яндекс.Метрика