Возможно ли сделать свое окно, владельцем чужого окна?
Есть окно - MainWindow, на нем кнопка, по ее нажатию запускается калькулятор, тот что в XP.
При активации MainWindow, каклькулятор остается сверху этого окна, но не поверх остальных окон.
При всем при этом MainWindow имеет возможность переключится, как поверх остальных окон, так и обратно.
При закрытии MainWindow, калькулятор закрывается так же.
Либо просто через процессы:
CreateProcess()
А здесь просто завершать процесс калькулятора, открытый в предыдущем случае.
Единственное неудобство может быть из-за того, что калькулятор будет виден как отдельное приложение в alt+tab/taskmgr. По-моему есть какой-то способ присвоить окно или поток себе, но я не помню.
Есть такое понятие как z-order окна, наверняка можно получить положение окна вашей программы, и сделать тем же SetWindowPos(неуверен что именно им, это в теории всё=)) положение окна калькулятора (ваше+1).
ExitProcess()
upd:да, кстати Proger_XP верно заметил, что если ваша программа будет в самом низу окон, а по alt-tab пользователь вызовет "из низа" калькулятор, может быть проблема =)
(если у вас зацикленно будет калькулятор возвращать "в низ" =))
Есть такое понятие как z-order окна, наверняка можно получить положение окна вашей программы, и сделать тем же SetWindowPos(неуверен что именно им, это в теории всё=)) положение окна калькулятора (ваше+1).
...
(если у вас зацикленно будет калькулятор возвращать "в низ" =))
Это будет жуткий интерфейс, пользователь будет биться головой об стенку...
плюс наверняка будет проблема, если открыть > 2 калькуляторов одновременно.
следовательно, если нужен хороший интерфейс, лучше написать свой калькулятор, и не быть зависимым от встроенного в ОС калькулятора.
По ходу наверое - [COLOR="Red"]НЕТ[/COLOR]?
Ну чтож, прийдется делать эдакую "эмуляцию" дочернего окошка.
Возможно прийдется создать такой хитро-мудрый класс с хитро-мудрыми методами.
Что б в итоге пользователь:D чувствовал себя комфортно.
Ну, например, видел я как-то не раз программы, запускающее у себя другую программу, но в то же время у обоих оставалось одно окно на таскбаре, в alt+tab и прочих местах.
Кажется, какой-то инсталлятор, который распаковывал рар-архив, обычное раровское окно, но его нигде не было видно.
Что б в итоге пользователь чувствовал себя комфортно.
А какая цель-то преследуется? Может, подскажем что-то более подходящее.
В общем не помню что за программа такая, но помню - была написана на Delphi.
Ну вообще был впечатлен, все красиво работало.
В общем да, нужен калькулятор, но и не только он один, а что там еще, я сам пока не знаю.
Возможно и другие приложения, по усмотрению руководства, у пользователя будет только то, что ему предоставят с надписью на кнопке.
Кажется, какой-то инсталлятор, который распаковывал рар-архив, обычное раровское окно, но его нигде не было видно.
признаю, видел я не всё в этой жизни, возможно и этого не видел.
но вот что видел:
инсталлятор, запускающий извлечение sfx архива, но в этом случае последний просто не имел опознавательных признаков(окна в таскбаре и т.п), т.е восстанавливая из свернутого вида главное окно инсталлятора, окно архиватора не восстанавливалось.
Возможно и другие приложения, по усмотрению руководства, у пользователя будет только то, что ему предоставят с надписью на кнопке.
т.е. замостить рабочий стол, чтобы ограничить доступ ко всем файлам кроме тех, которые можно вызвать "по кнопке" ?
но тогда задача одна - держать основу(главное окно с кнопками) в самой нижней позиции z-order, насколько я понимаю..
но тогда задача одна - держать основу(главное окно с кнопками) в самой нижней позиции z-order, насколько я понимаю..
В общем да, но не совсем, это выберается по усмотрению Руководства.
Дадут добро для пользователя юзать всякий софт, тогда и MainWindow будет как простое окно(без всяких там примудростей).
Ну а если нет:
- MainWindow запускается максимизированным без панели и границ.
- MainWindow поверх остальных окон, это если какой-то хитрый процесс не захочет померать(ну об этом далее...).
- Проверка на активацию MainWindow по таймеру(это если ненужное приложение по случаю покажется, прихлопнуть его тихонько:eek:, и дело с концом, не получится прихлопнуть, ну и Dog с ним, а MainWindow, в любом случае на место поставить, сделать активниньким, всех отальных, "непослушных" - перетопить(z-order)).
- Hooks на Alt+Tab, на Ctrl+Esc, на клавишу - Windows, ну и чего там еще...(без комментариев).
С написаным выше я давно уже разобрался, работает(не вопрос).:)
Но еще есть Диспетчер задач, а с ним так-же надо как-то поступить.
То-есть при вызове диспетчера, по таймеру, найти его и хлопнуть по тихому, но вариант так себе, диспетчер успевает моргнуть зараза;).
Че с ним делать, даже не представляю, через Групповую политику - реестр, дык при вызове сообщение будет показывать(не вариант), хукнуть его комбинацию вызова, так-же нельзя, или можно, не знаю - но в поиске....
И еще, нужно будет при запуске MainWindow(когда требуется), перебить все процессы пользователя, кроме тех, без которых не обойтись, и тех, что разрешено Руководством.
А вот как определить какие процессы грохнуть, по "Имени пользователя", так там кажись нет у процессов "Имени пользователя", как система определяет в диспетчере задач, в какую категорию определить процесс, не знаю?
зы:
[Прям не программа, а battlefield какой-то ...да простят меня все пользователи за такие мои деяния.]
И не надо будет никаких трюков с замощением рабочего стола - разве что для красоты. В общем, контроль будет полный.
Правда, это уже больше метод вирусописателей (и антивирусописателей), так что может антивирус взбунтоваться, то с ним дело уладь просто.
И не надо будет никаких трюков с замощением рабочего стола - разве что для красоты. В общем, контроль будет полный.
По моему идея хороша, больше скажу - просто супер!