Текущий архив: 2006.05.07;
Скачать: CL | DM;
ВнизОграничение числа экземпляров Найти похожие ветки
← →
Alexander Panov © (2006-03-31 09:40) [80]
> Defunct © (31.03.06 09:36) [78]
>
> Alexander Panov © (31.03.06 09:31) [77]
>
> должно быть просто:
> или консольное приложение отнести к "безоконным",
> или создав невидимое окошко - перевести в разряд "оконных"
> ;>
Проблема во второй части задачи: вывести на передний план.
Я пока не пытался работать с консольными приложениями. Если бы они ничем не отличались от оконных, тогда никаких проблем не было бы.-)
← →
Defunct © (2006-03-31 16:47) [81]Alexander Panov © (31.03.06 09:38) [79]
> Если это твое приложение. А если чужое, но использует тот же номер сообщения?
Уже ответил на этот вопрос [73]
> Ситуация маловероятна, но возможна. А то, что возможно, бывает происходит чаще, чем хотелось бы.
Ситуация действительно очень маловероятна. Можно попробовать задать сообщение строкой с русскими символами ;> что еще сильнее снизит вероятность появления такой ситуации.
← →
Defunct © (2006-03-31 16:51) [82]> Я пока не пытался работать с консольными приложениями. Если бы они ничем не отличались от оконных, тогда никаких проблем не было бы.-)
Дык, консольные приложения в подавляющем большинстве случаев используеются с перенапраленным выводом, и "резидентно" не висят в памяти долго ;>
← →
Alexander Panov © (2006-03-31 17:06) [83]>
> Defunct © (31.03.06 16:47) [81]
>
> Alexander Panov © (31.03.06 09:38) [79]
>
> > Если это твое приложение. А если чужое, но использует
> тот же номер сообщения?
>
> Уже ответил на этот вопрос [73]
Ведь не обязательно чужое приложение использует сообщение с регистрацией по имени?
← →
Defunct © (2006-03-31 18:03) [84]Alexander Panov © (31.03.06 17:06) [83]
Дык, грамотные приложения не будут использовать сообщения с номерами, зарезервированными под регистрацию без предварительной регистрации. Они будут использовать сообщения WM_USER + .. для своих нужд не так ли?
Приложения, которые используют "отфонарные" номера сообщений для своих нужд, IMHO нужно сразу отправлять в корзину.
← →
Alexander Panov © (2006-03-31 18:19) [85]
> Приложения, которые используют "отфонарные" номера сообщений
> для своих нужд, IMHO нужно сразу отправлять в корзину.
Ну почему. Для внутрипрограммного взаимодействия совсем необязательно регистрировать сообщение. Вот для межпрограммного - да.
Так что никакого криминала в использовании номерв незарегистрированных сообщений нет.
Поэтому Broadcast с любым номер, в принципе, чреват вылетом некоего случайного приложения.
← →
Defunct © (2006-03-31 20:08) [86]> Ну почему. Для внутрипрограммного взаимодействия совсем необязательно регистрировать сообщение. Вот для межпрограммного - да.
Регистрировать не обязательно, но и использовать любые номера сообщений "от фонаря" тоже нельзя. В Windows отводится непомню сколько точно номеров начиная с номера WM_USER как раз для такого внутрипрограммного взаимодействия.
> Так что никакого криминала в использовании номерв незарегистрированных сообщений нет.
Конечно нет, если только не используются номера системных и зарезервированных под регистрацию сообщений в целях внутрипрограммного взаимодейтсвия.
← →
Leonid Troyanovsky © (2006-04-01 11:40) [87]
> Defunct © (31.03.06 09:10) [76]
> тогда либо вы, либо я неправильно понимаем написанное в
> MSDN. Конкретно мое приложение не использует LockSetForegroudWindow,
> соответственно никаких проблем на которые вы так упорно
> уже 4-й раз намекаете, но прямо ничего не говорите, быть
> не может.
Starting with Microsoft Windows 98 and Windows 2000, the system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:
The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
Windows 2000/XP: No menus are active.
Это перечень условий, для тех кто может set.
Прошу указать на такое условие:
окно процесса получило (бродкаст) сообщение.
--
Regards, LVT.
← →
Alexander Panov © (2006-04-01 15:06) [88]
> Defunct © (31.03.06 20:08) [86]
> Регистрировать не обязательно, но и использовать любые номера
> сообщений "от фонаря" тоже нельзя. В Windows отводится непомню
> сколько точно номеров начиная с номера WM_USER как раз для
> такого внутрипрограммного взаимодействия.
Я не о том говорил. Любая программа может использовать сообщения из пользовательского диапазона свободно, как для внетреннего, так и для межпрограммного взаимодействия.
Если программа использует сообщение внутри приложения, не регистрируя его в системе(что вполне возможно - такое вижу сплошь и рядом), то при посылке сообщения из твоей программы широковещательного сообщения эта программа его получит и обработает в соответствии со своими понятиями. Вплоть до AV.
← →
Defunct © (2006-04-01 23:25) [89]Alexander Panov © (01.04.06 15:06) [88]
> Я не о том говорил. Любая программа может использовать сообщения из пользовательского диапазона свободно, как для внетреннего, так и для межпрограммного взаимодействия.
Да все верно.
> Если программа использует сообщение внутри приложения, не регистрируя его в системе(что вполне возможно - такое вижу сплошь и рядом), то при посылке сообщения из твоей программы широковещательного сообщения эта программа его получит и обработает в соответствии со своими понятиями. Вплоть до AV.
Из моей программы посылается броадкаст с сообщением, уникальный номер которого получен в результате регистрации сообщения. Соответвенно, номер этого сообщения НЕ ИЗ ПОЛЬЗОВАТЕЛЬСКОГО диапазона.
Не хочу разводить баталии по этому поводу. Однако мне плевать, на программы, которые игнорируют общепринятые правила. Если программист, писавший программы, был не в курсе, что номера сообщений зарезервированных под регистрацию нельзя использовать без регистрации , то это его личная проблема и место его программы в корзине. На AV в чужих программах мне плевать (я такие удаляю сразу).
Leonid Troyanovsky © (01.04.06 11:40) [87]
A process can set the foreground window only if one of the following conditions is true
переводится как:
"процесс может установть окно на передний план только если одно из перечисленных условий справедливо".
В моем случае как минимум несколько условий True:
- нет активных меню,
- foreground not locked
- косвенно - there is not foreground window (после Halt(0))..
← →
Alexander Panov © (2006-04-02 00:35) [90]
> Defunct © (01.04.06 23:25) [89]
Хорошо, согласен. Ты меня убедил. В принципе, такой метод для оконных программ подходит.
Только Broadcast вынести в dpr до создания главной формы, и будет все красиво.
Остаются консольные приложения.
← →
Piter © (2006-04-02 01:12) [91]Alexander Panov © (02.04.06 0:35) [90]
Только Broadcast вынести в dpr до создания главной формы, и будет все красиво
угу, а перед этим ручками создать сигнальное окно?
Нет, я уж лучше мьютексами...
← →
Defunct © (2006-04-02 01:37) [92]Alexander Panov © (02.04.06 00:35) [90]
> Только Broadcast вынести в dpr до создания главной формы, и будет все красиво.
Появится некоторая сложность в организации двухстороннего обмена.. Расчитывать только на MSG.Result нельзя, как раз из-за вероятности присутствия в системе таких программ, о которых вы говорили. (которые могут использовать номер нашего сообщения).
> Остаются консольные приложения.
Тут, я - пас. ;>
← →
Leonid Troyanovsky © (2006-04-02 03:36) [93]
> Defunct © (01.04.06 23:25) [89]
> - косвенно - there is not foreground window (после Halt(0)).
Нет, конечно. Halt выполняется после SentMessage,
т.е. первая копия пытается активизировать себя тогда,
когда вторая foreground.
По поводу других true, можно сказать, что они необходимы,
но, все же, не достаточны.
--
Regards, LVT.
← →
Defunct © (2006-04-02 04:23) [94]Leonid Troyanovsky © (02.04.06 03:36) [93]
Может вы и правы. Хоть в старом MSDN нет таких условий, возможно стоит сделать так чтобы новая копия сама выдвигала окно старой копии наперед, тем более Handle окна известен и приходит ответным сообщением.
Но тут мне кажется могут возникнуть трудности с show.. Imho не очень красиво получится, т.к. только что запущенная программа не знает в каком состоянии находится предыдущая копия (вдруг она свернута и в тоже время видима), тогда будет глюк с миганием в таскбаре вместо отображения окна формы.
Я все-таки за то, чтобы программа (в данном случае старая копия программы) сама отвечала за корректность отображения своих окон.
← →
Alexander Panov © (2006-04-02 05:40) [95]>Defunct © (02.04.06 04:23) [94]
С Broadcast еще одна проблема возникает - приложения в разных сессиях...
← →
Leonid Troyanovsky © (2006-04-02 11:11) [96]
> Defunct © (02.04.06 04:23) [94]
> возможно стоит сделать так чтобы новая копия сама выдвигала
> окно старой копии наперед, тем более Handle окна известен
Не можно, а нужно.
> Но тут мне кажется могут возникнуть трудности с show.. Imho
> не очень красиво получится, т.к. только что запущенная программа
> не знает в каком состоянии находится предыдущая копия (вдруг
Здесь, видимо, важно состояние не столько первой копии, как запускаемой.
Т.е., то, что юзер выбрал (в параметрах ярлыка, start & etc: развернутое
на весь экран, свернутое в значок и др.) задать первой копии.
--
Regards, LVT.
Страницы: 1 2 3 вся ветка
Текущий архив: 2006.05.07;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.016 c