Russian Qt Forum

Qt => Вопросы новичков => Тема начата: micolo от Август 19, 2013, 14:34



Название: Собственная графическая оболочка под Windows
Отправлено: micolo от Август 19, 2013, 14:34
Доброго времени суток!
Разрабатываю графическую оболочку под windows, по типу тех что используются в игровых клубах. Вопрос собственно вот в чем. Как грамотнее организовать механизм отслеживания и работы с запущенными приложениями. Т.е. приложения которые были запущены непосредственно из-под оболочки. Необходимо сделать графическую панель где будут отображаться запущенные в данный момент приложения, открыты ли они или свернуты, по типу Панели задач в windows, правда с куда более простым функционалом.  Понятно что внешние приложения запускаются через QProcess. А как их отслеживать дальше? Возможно ли это сделать только средствами QT или же все равно придется прикручивать WinAPI?


Название: Re: Собственная графическая оболочка под Windows
Отправлено: Kurles от Август 19, 2013, 16:10
Для 90% программ должно хватить QProcess, остальные - уже гораздо сложнее, например тот же хром при запуске клонирует самого себя и завершает работу, оставляя запущенным дочерний процесс. Соответственно QProcess из-за этого считает, что программа завершила свою работу, что не очень соответствует действительности :)


Название: Re: Собственная графическая оболочка под Windows
Отправлено: neversleep от Август 19, 2013, 16:57
Осмелюсь предположить, что прикручивать winapi придётся однозначно, далее перечисляешь всё окна в системе (EnumWindows), по идентификатору окна получаешь идентификатор процесса(GetWindowThreadProcessId), по идентификатору процесса смотришь какой процесс его породил(PROCESSENTRY32.th32ParentProcessID), и если среди родителей окажется твоя оболочка, получаешь все необходимые тебе сведения о окне/процессе, исходя из найденных идентификаторов :)

Это я рассматривал только тот случай, если твоя оболочка будет запускать gui приложения имеющие "реальные" вендовые окна. Но лучше конечно перечелять все процессы в системе.


Название: Re: Собственная графическая оболочка под Windows
Отправлено: micolo от Август 19, 2013, 17:12
Спасибо за ответы!
Я тоже думаю что придется перечислять через EnumWindows и определять родительское окно или процесс. Единственно что меня смущает, в оболочке есть определенные разделы и теоретически возможен вариант того, что в разные разделы поместят одинаковые проги, и при переключении между разделами нужно чтобы на панели отображались запущенные проги именно с этого раздела. Если такое вообще возможно, получается надо при запуске приложений их как-то идентифицировать, чтобы в дальнейшем получить эти данные через WinAPI.


Название: Re: Собственная графическая оболочка под Windows
Отправлено: neversleep от Август 19, 2013, 17:20
Еще как вариант, можно с SetWindowsHookEx (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx) поэкспериментировать.


Название: Re: Собственная графическая оболочка под Windows
Отправлено: Majestio от Август 20, 2013, 10:30
В первом сообщении увидел словосочетание "в игровых клубах". Сразу вспомнились "дополнительные" моменты с манипуляциями окнами и процессами. Посмотрите заранее в сторону программы игровой защиты Frost и что она при работе вносит в систему. Программа по сути - руткит. Прячет процессы, хэндлы открытых окон отдает равными нулю. Вобщем, просто имейте ввиду - граби иногда лежат там, где их определенно не ждешь.