![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрет перемещений других окон в выбранной области экрана [D6, XP]
Elen © (2006-11-15 11:27:00)Доброго времени суток Господа!
Вопрос у меня Вам покажется скорее всего весьма странный и все же :
Есть сторонняя программа, которая при запуске прилипает к верху экрана а-ля alTop. Все кто с ней работает ругаются на одну странную особенность - Другие окна запущенных программ не могут быть перетасканы в область экрана, занимаемую этой прогой. Т.Е. рабочий стол укорачивается примерно на треть экрана. А наши работают в Акаде и для черчения им нужен весь экран. Вопрос в том - как эта прога заграбастывает чисто под себя часть экрана, запрещает перетаскивание других окон других прог над собой. И разворачивание всех других окон "на весь экран" на самом деле происходит до низа той проги. Второй вопрос - как от этого избавиться? (исходники отсутствуют).
С помощью Spy я определяю что всю область рабочего стола до запуска злополучной проги занимает SysListView32 в Progmane. После запуска Все имеющиеся на экране окна автоматически меняют позицию становясь под окно той проги. Когда окно ее сворачивается на экране остается область, занимаемая ее окном, но все другие окна в эту область перетащить нельзя. Spy показывает что эта область пренадлежит Program Manager, т.е окна SysListView32 и SHELLDLL_DefView поменяли свои размеры.
Идея была такая -для SysListView32 и SHELLDLL_DefView поменять позицию и габариты :
h:=FindWindow('Progman','Program Manager');
h:=FindWindowEx(h,0,'SHELLDLL_DefView','');
SetWindowPos(h,HWND_BOTTOM,0,0,Screen.Width,Screen.Height,SWP_FRAMECHANGED);
Но это не дает нужных результатов
Как это правильно поправить или понять, как это сделано?
(Sorry за может непонятно заданный вопрос...)
Elen (2006-11-15 12:09:00) [1]
> Если враг не сдается, то мы его его же оружием
;) Другого выхода нет. Там еще столько багов мне придется за него исправлять... Может и задам потом пару вопросиков...
Anatoly Podgoretsky (2006-11-15 12:05:00) [2]> Elen (15.11.2006 12:01:06) [6]
> Автор - дятел.
Это точно.
Anatoly Podgoretsky (2006-11-15 12:04:00) [3]Elen © (15.11.06 12:01) [6]
Если враг не сдается, то мы его его же оружием.
Elen (2006-11-15 12:01:00) [4]
> а зачем она, собственно? И что, при работе с акадом, ее
> нельзя временно усыпить? Ну или хотя бы принудительно нулевую
> высоту ей выставить
Автор - дятел. Серьезно, не подумал о пользователях. И временно усыпить не получается - область остается.
> Anatoly Podgoretsky
Мириться не буду - уж очень автор достал. На уступки не идет - порет, гад, свою политику... Ну в общем ладно, если интересно из положения выхожу так :
SystemParametersInfo(SPI_SETWORKAREA,0,@screenRect,SPIF_SENDCHANGE);
Работает. Пускай теперь висит сзади.
Всем спасибо тема закрыта!
Anatoly Podgoretsky (2006-11-15 11:57:00) [5]> Elen (15.11.2006 11:27:00) [0]
Я бы сказал, что эта программа троян.
Ну как ты уже сказала - она во первых занимает всю облать стола с помощью SysListView32
Во вторых если она бы была написана правильно, то есть регистрировалась как AppBar то и в этом случае эту область все равно занять бы не удалось. Если имеет отключаемое свойство Прилипать, то запретить, если нет, то единственный способ не запускать, лучше никогда.
Если же такой возможности нет, то мириться с ее поведением.
clickmaker (2006-11-15 11:49:00) [6]
> Как этого избежать?
а зачем она, собственно? И что, при работе с акадом, ее нельзя временно усыпить? Ну или хотя бы принудительно нулевую высоту ей выставить
Elen (2006-11-15 11:48:00) [7]
> clickmaker
YESSSSSS!!!!! Спасибо, колега, большое. Разобралась и все сработало 8)
Elen (2006-11-15 11:42:00) [8]
> clickmaker
Как этого избежать? (я пока ща в SDK полезу, спасибо за намек)
clickmaker (2006-11-15 11:30:00) [9]я боюсь, что она делает SystemParametersInfo(SPI_SETWORKAREA
так же как таксбар