Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Always On Bottom [D7, WinXP]


Newuser0 ©   (2006-11-03 15:14:00) 

Каким образом можно реализовать задачу, чтобы главное окно моей программы было всегда позади окон других программ?
...
Доброе время суток, уважаемые мастера.
Пишу программу, нечто подобное оболочки для OS Windows. Я уже когда-то давно несколько лет назад задавал этот вопрос, и здесь мне дали грамотный ответ, но моя программа вместе с исходником бесследно пропала. По этому приходится снова задавать этот вопрос.


DVM   (2006-11-05 15:06:00) [1]

Упс... Сообщение [8] не в эту ветку. Удалите.


DVM   (2006-11-05 15:05:00) [2]

Самое верное в NT системах переключение на свой созданный десктоп. Там и диспетчера задач видно не будет.


DVM   (2006-11-05 15:02:00) [3]


> Если все это применить, то, пожалуй, и в недокументированных
> функциях нужды не возникнет.

Может да, а может и нет. Эти действия не гарантируют, что окно шелла будет ниже всех. Всегда найдется программа, окно которой сможет залезть под окно шелла. С SetShellWindow() такое невозможно.


Leonid Troyanovsky   (2006-11-05 14:14:00) [4]


> DVM ©   (05.11.06 10:37) [6]

> применить SetWindowPos() с нужными параметрами и добавить
> обработчик WM_WINDOWPOSCHANGING - то вообще будет замечательно.


Если все это применить, то, пожалуй, и в недокументированных
функциях нужды не возникнет.

--
Regards, LVT.


DVM   (2006-11-05 10:37:00) [5]


> ничего по данному вопросу недаст, т.к. программа загрузится
> вместо explorer´a и все, а окно позади других небудет

Ты ответы читаешь? Все будет как надо. Если еще для верности применить SetWindowPos() с нужными параметрами и добавить обработчик WM_WINDOWPOSCHANGING - то вообще будет замечательно.


newuser0   (2006-11-04 15:07:00) [6]

Shell="c:\myprogramdir\myprog.exe"
ничего по данному вопросу недаст, т.к. программа загрузится вместо explorer´a и все, а окно позади других небудет


PEAKTOP   (2006-11-03 17:30:00) [7]

> С VCL окнами не работает - проблема где то в Application вроде как.


Работает, если передать хендл не TForm, а Application

> Но если уже есть одно такое окно (а оно как правило есть  - это окно эксплорера)

Не вопрос.
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System
Shell="explorer.exe"

Поменять на
Shell="c:\myprogramdir\myprog.exe"


DVM   (2006-11-03 16:12:00) [8]


> Сергей М. ©   (03.11.06 15:47) [2]

Можно ниже всех. Но только один раз.
Есть такая недокументированная функция, которую использует эксплорер:
function SetShellWindow(hWnd: HWND): dword; stdcall; external 'User32.dll' name 'SetShellWindow';

Она позволяет окно отодвинуть на задний план и оно будет удерживаться там системой. Но если уже есть одно такое окно (а оно как правило есть - это окно эксплорера) то функция ничего не делает.

С VCL окнами не работает - проблема где то в Application вроде как.


Сергей М.   (2006-11-03 15:47:00) [9]


> Newuser0   (03.11.06 15:14)


Никак.
Всегда найдется программа, желающая того же.


NewUser0   (2006-11-03 15:26:00) [10]

приношу извинения, неувидел что данныи вопрос уже обсуждается


Наверх

Титульная страница Поиск, карта сайта Написать письмо