Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возможно ли сделать свое окно, владельцем чужого окна?

55K
20 марта 2010 года
u.nu
16 / / 18.03.2010
К примеру:
Есть окно - MainWindow, на нем кнопка, по ее нажатию запускается калькулятор, тот что в XP.
При активации MainWindow, каклькулятор остается сверху этого окна, но не поверх остальных окон.
При всем при этом MainWindow имеет возможность переключится, как поверх остальных окон, так и обратно.
При закрытии MainWindow, калькулятор закрывается так же.
253
20 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Если задача конкретно про калькулятор - по-моему проще сделать форму самому.
Либо просто через процессы:
Цитата:
Есть окно - MainWindow, на нем кнопка, по ее нажатию запускается калькулятор, тот что в XP.


CreateProcess()

Цитата:
При закрытии MainWindow, калькулятор закрывается так же.


А здесь просто завершать процесс калькулятора, открытый в предыдущем случае.

Единственное неудобство может быть из-за того, что калькулятор будет виден как отдельное приложение в alt+tab/taskmgr. По-моему есть какой-то способ присвоить окно или поток себе, но я не помню.

8.4K
20 марта 2010 года
z0rch
275 / / 02.09.2008
Цитата: u.nu
При активации MainWindow, каклькулятор остается сверху этого окна, но не поверх остальных окон.


Есть такое понятие как z-order окна, наверняка можно получить положение окна вашей программы, и сделать тем же SetWindowPos(неуверен что именно им, это в теории всё=)) положение окна калькулятора (ваше+1).

Цитата: u.nu
При закрытии MainWindow, калькулятор закрывается так же.


ExitProcess()

upd:да, кстати Proger_XP верно заметил, что если ваша программа будет в самом низу окон, а по alt-tab пользователь вызовет "из низа" калькулятор, может быть проблема =)
(если у вас зацикленно будет калькулятор возвращать "в низ" =))

253
20 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата:

Есть такое понятие как z-order окна, наверняка можно получить положение окна вашей программы, и сделать тем же SetWindowPos(неуверен что именно им, это в теории всё=)) положение окна калькулятора (ваше+1).
...
(если у вас зацикленно будет калькулятор возвращать "в низ" =))


Это будет жуткий интерфейс, пользователь будет биться головой об стенку...

8.4K
20 марта 2010 года
z0rch
275 / / 02.09.2008
абсолютно согласен, но а как можно "таскать за собой другое окно", не привязав его к себе твоим способом? -->
Цитата:
По-моему есть какой-то способ присвоить окно или поток себе, но я не помню.



плюс наверняка будет проблема, если открыть > 2 калькуляторов одновременно.
следовательно, если нужен хороший интерфейс, лучше написать свой калькулятор, и не быть зависимым от встроенного в ОС калькулятора.

55K
21 марта 2010 года
u.nu
16 / / 18.03.2010
Сам себя цитирую:
Цитата:
Возможно ли сделать свое окно, владельцем чужого окна?


По ходу наверое - [COLOR="Red"]НЕТ[/COLOR]?
Ну чтож, прийдется делать эдакую "эмуляцию" дочернего окошка.
Возможно прийдется создать такой хитро-мудрый класс с хитро-мудрыми методами.
Что б в итоге пользователь:D чувствовал себя комфортно.

253
21 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
z0rch
Цитата:
По-моему есть какой-то способ присвоить окно или поток себе, но я не помню.


Ну, например, видел я как-то не раз программы, запускающее у себя другую программу, но в то же время у обоих оставалось одно окно на таскбаре, в alt+tab и прочих местах.
Кажется, какой-то инсталлятор, который распаковывал рар-архив, обычное раровское окно, но его нигде не было видно.

Цитата:

Что б в итоге пользователь чувствовал себя комфортно.


А какая цель-то преследуется? Может, подскажем что-то более подходящее.

55K
21 марта 2010 года
u.nu
16 / / 18.03.2010
Я видел когда-то, подобную программу, по-моему тестер какой-то.
В общем не помню что за программа такая, но помню - была написана на Delphi.
Ну вообще был впечатлен, все красиво работало.
55K
21 марта 2010 года
u.nu
16 / / 18.03.2010
Цитата:
А какая цель-то преследуется?


В общем да, нужен калькулятор, но и не только он один, а что там еще, я сам пока не знаю.
Возможно и другие приложения, по усмотрению руководства, у пользователя будет только то, что ему предоставят с надписью на кнопке.

8.4K
21 марта 2010 года
z0rch
275 / / 02.09.2008
Цитата: Proger_XP
Ну, например, видел я как-то не раз программы, запускающее у себя другую программу, но в то же время у обоих оставалось одно окно на таскбаре, в alt+tab и прочих местах.
Кажется, какой-то инсталлятор, который распаковывал рар-архив, обычное раровское окно, но его нигде не было видно.


признаю, видел я не всё в этой жизни, возможно и этого не видел.
но вот что видел:
инсталлятор, запускающий извлечение sfx архива, но в этом случае последний просто не имел опознавательных признаков(окна в таскбаре и т.п), т.е восстанавливая из свернутого вида главное окно инсталлятора, окно архиватора не восстанавливалось.

Цитата:
В общем да, нужен калькулятор, но и не только он один, а что там еще, я сам пока не знаю.
Возможно и другие приложения, по усмотрению руководства, у пользователя будет только то, что ему предоставят с надписью на кнопке.


т.е. замостить рабочий стол, чтобы ограничить доступ ко всем файлам кроме тех, которые можно вызвать "по кнопке" ?
но тогда задача одна - держать основу(главное окно с кнопками) в самой нижней позиции z-order, насколько я понимаю..

55K
21 марта 2010 года
u.nu
16 / / 18.03.2010
Цитата:
т.е. замостить рабочий стол, чтобы ограничить доступ ко всем файлам кроме тех, которые можно вызвать "по кнопке" ?
но тогда задача одна - держать основу(главное окно с кнопками) в самой нижней позиции z-order, насколько я понимаю..


В общем да, но не совсем, это выберается по усмотрению Руководства.
Дадут добро для пользователя юзать всякий софт, тогда и MainWindow будет как простое окно(без всяких там примудростей).
Ну а если нет:

  • MainWindow запускается максимизированным без панели и границ.
  • MainWindow поверх остальных окон, это если какой-то хитрый процесс не захочет померать(ну об этом далее...).
  • Проверка на активацию MainWindow по таймеру(это если ненужное приложение по случаю покажется, прихлопнуть его тихонько:eek:, и дело с концом, не получится прихлопнуть, ну и Dog с ним, а MainWindow, в любом случае на место поставить, сделать активниньким, всех отальных, "непослушных" - перетопить(z-order)).
  • Hooks на Alt+Tab, на Ctrl+Esc, на клавишу - Windows, ну и чего там еще...(без комментариев).
И все это только для того, что-бы пользователь никуда не смог дотянутся рученками шаловливыми, кроме того - что ему предоставлено Руководством.

С написаным выше я давно уже разобрался, работает(не вопрос).:)

Но еще есть Диспетчер задач, а с ним так-же надо как-то поступить.
То-есть при вызове диспетчера, по таймеру, найти его и хлопнуть по тихому, но вариант так себе, диспетчер успевает моргнуть зараза;).
Че с ним делать, даже не представляю, через Групповую политику - реестр, дык при вызове сообщение будет показывать(не вариант), хукнуть его комбинацию вызова, так-же нельзя, или можно, не знаю - но в поиске....
И еще, нужно будет при запуске MainWindow(когда требуется), перебить все процессы пользователя, кроме тех, без которых не обойтись, и тех, что разрешено Руководством.
А вот как определить какие процессы грохнуть, по "Имени пользователя", так там кажись нет у процессов "Имени пользователя", как система определяет в диспетчере задач, в какую категорию определить процесс, не знаю?
зы:
[Прям не программа, а battlefield какой-то ...да простят меня все пользователи за такие мои деяния.]
253
21 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Если у вас стоит задача именно не дать ничего запустить без вашего ведома, то проще (и надёжнее/красивее) будет копнуть в сторону перехвата ZwOpenProcess (ну, и ещё каких-то функций, может). Т.к. все открываемые приложения в конце концов проходят через эту функцию, то при запуске чего угодно из любых источников у вас будет возможность посмотреть, что это, и если не нравится - вернуть ошибку из функции.
И не надо будет никаких трюков с замощением рабочего стола - разве что для красоты. В общем, контроль будет полный.

Правда, это уже больше метод вирусописателей (и антивирусописателей), так что может антивирус взбунтоваться, то с ним дело уладь просто.
55K
21 марта 2010 года
u.nu
16 / / 18.03.2010
Цитата:
Если у вас стоит задача именно не дать ничего запустить без вашего ведома, то проще (и надёжнее/красивее) будет копнуть в сторону перехвата ZwOpenProcess (ну, и ещё каких-то функций, может). Т.к. все открываемые приложения в конце концов проходят через эту функцию, то при запуске чего угодно из любых источников у вас будет возможность посмотреть, что это, и если не нравится - вернуть ошибку из функции.
И не надо будет никаких трюков с замощением рабочего стола - разве что для красоты. В общем, контроль будет полный.


По моему идея хороша, больше скажу - просто супер!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог