Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

Ограничение числа экземпляров   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.63 MB
Время: 0.016 c
5-1130227678
DimaBr
2005-10-25 12:07
2006.05.07
Редакторы компонент


8-1125856202
NightLord
2005-09-04 21:50
2006.05.07
Звуковые данные


2-1145273601
shick
2006-04-17 15:33
2006.05.07
dbgrid и 2 таблицы paradox


1-1143758241
vagra
2006-03-31 02:37
2006.05.07
Как узнать тип диска


8-1131182811
Lisa
2005-11-05 12:26
2006.05.07
Создание компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский