![]() |
WinAPi приложение поверх всех окон
Простой вопрос.
необходимо открыть приложение(например "pr1.exe") со "свойством" AlwaysOnTop(ну воерх всех окон т.е.) а потом по желанию закрыть. И если есть возможность(не обязательно) отловить, когда это приложение станет не активным и так же закрыть.... WinAPI & C++.... |
XCodeR
Код на С++ привести не могу,но принцип будет такой,что главное окно приложения создаёшь функцией CreateWindowEx и в качестве первого параметра передаёшь ей стиль WS_EX_TOPMOST. А если уничтожить,то тогда DestroyWindow. А отлавливать неактивность окна можно анализируя сообщения в оконной функции(WindowProc) твоего приложения.В данном случае нас будет интересовать сообщение WM_ENABLE. |
Нас интересует WM_ACTIVATE (если речь идёт о переключении Alt+Tab). Ещё можно SetWindowPos(hwnd, HWND_TOPMOST, ....);
|
pva
Тогда уж WM_ACTIVATEAPP. |
Согласен
|
Цитата:
Например функцией CreateProcess. Но там я не нашел, где можно поставить свойство alwaysontop.... |
XCodeR
Откуда вы товарищ вообще взяли этот "alwaysontop"?? Если речь идёт о чужом приложении,то тогда запускайте его,находите его главное окно(FindWindow) и используйте функцию SetWindowPos с параметром HWND_TOPMOST(как предложил pva). |
фактически получилось, но вот проблема, программа("внешняя") открывается через какое-то время, а => её не найти с помощью FindWindow.
Может можно как-нибудь сделать таймер ожидания?... или взять хендл приложения(окна) сразу после выхова CreateProcess... пора взяться с WinApi....(((( *с = за |
Запуститься и тупо каждые 0.5 секунды искать требуемое окно? Небольшой лаг, но очень просто. Сложнее - перехватить CreateProcess или CreateWindow(Ex). Или поставить хук на WH_SHELL и ловить HSHELL_WINDOWCREATED. Но по моему, это гораздо муторнее и совсем не нужно.
|
Цитата:
|
Есть на этот случай полезная функция WaitForInputIdle.
Код:
PROCESS_INFORMATION pi; |
Здраствуйте. Давно интересовался данной опцией. Помогите пожалуйста с исходным кодом. Итак у меня код вида:
Код:
***** |
Цитата:
На каком языке-то требуется?? В любом случае это можно сделать с помощью функции SetWindowPos,передавая ей в качестве второго параметра флаг HWND_TOPMOST или HWND_BOTTOM, т.е. поверх или поднизом всех окон. И потом добавить в WindowProc приложения фильтрацию сообщений WM_COMMAND, чтобы отловить момент установки/снятия т.н. флажка. Могу написать пробный код(просто самому интересно), но на ассемблере. |
DillerInc
Цитата:
|
А... :biggrin: Извиняюсь. Пишу на Дельфи. А так просто указал названия ресурсов из res файла. Просто где-то надыбал код:
Код:
var Вообщем помогите кто чем может. :unsure: |
Вложений: 1
Maksim V
В общем,прикрепляю небольшой исходник со скомпилированной программкой на облегчённых Дельфях. Облегчённые Дельфи -- это полный отказ от VCL, т.е. использование только WinAPI.Основной плюс -- минимальный(для Дельфи) размер выходного исполняемого файла. В общем,изучай исходник. Цитата:
P.S. Если что,то я уже давно не пишу на Дельфи.Могут быть некоторые несуразности. P.P.S. Assembler forever!! |
Вложений: 1
Спасибо. :) Разобрался. :)Вот кому интересно будет, приаттачил архив.
Да, кстати, дайте пожалуйста код для меню. Как в Диспетчере задач - отмечаешь галочкой пункт меню и окно поверх других окон. Желательно приаттачтьте исходник. |
Всем привет. У меня возникает такая сложность. Использую VB 6.0.
Моя форма как и должно быть становиться поверх других окон, но не поверх панели быстрого запуска. Т. е. если форма находиться в открытом состоянии на панели быстрого запуска, то при клике на саму панель, форма прячется под эту самую панель. Что можно сделать? |
Цитата:
|
Цитата:
|
Время: 15:51. |
Время: 15:51.
© OSzone.net 2001-