Russian Qt Forum
Ноябрь 26, 2024, 14:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Собственная графическая оболочка под Windows  (Прочитано 3834 раз)
micolo
Гость
« : Август 19, 2013, 14:34 »

Доброго времени суток!
Разрабатываю графическую оболочку под windows, по типу тех что используются в игровых клубах. Вопрос собственно вот в чем. Как грамотнее организовать механизм отслеживания и работы с запущенными приложениями. Т.е. приложения которые были запущены непосредственно из-под оболочки. Необходимо сделать графическую панель где будут отображаться запущенные в данный момент приложения, открыты ли они или свернуты, по типу Панели задач в windows, правда с куда более простым функционалом.  Понятно что внешние приложения запускаются через QProcess. А как их отслеживать дальше? Возможно ли это сделать только средствами QT или же все равно придется прикручивать WinAPI?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Август 19, 2013, 16:10 »

Для 90% программ должно хватить QProcess, остальные - уже гораздо сложнее, например тот же хром при запуске клонирует самого себя и завершает работу, оставляя запущенным дочерний процесс. Соответственно QProcess из-за этого считает, что программа завершила свою работу, что не очень соответствует действительности Улыбающийся
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
neversleep
Гость
« Ответ #2 : Август 19, 2013, 16:57 »

Осмелюсь предположить, что прикручивать winapi придётся однозначно, далее перечисляешь всё окна в системе (EnumWindows), по идентификатору окна получаешь идентификатор процесса(GetWindowThreadProcessId), по идентификатору процесса смотришь какой процесс его породил(PROCESSENTRY32.th32ParentProcessID), и если среди родителей окажется твоя оболочка, получаешь все необходимые тебе сведения о окне/процессе, исходя из найденных идентификаторов Улыбающийся

Это я рассматривал только тот случай, если твоя оболочка будет запускать gui приложения имеющие "реальные" вендовые окна. Но лучше конечно перечелять все процессы в системе.
Записан
micolo
Гость
« Ответ #3 : Август 19, 2013, 17:12 »

Спасибо за ответы!
Я тоже думаю что придется перечислять через EnumWindows и определять родительское окно или процесс. Единственно что меня смущает, в оболочке есть определенные разделы и теоретически возможен вариант того, что в разные разделы поместят одинаковые проги, и при переключении между разделами нужно чтобы на панели отображались запущенные проги именно с этого раздела. Если такое вообще возможно, получается надо при запуске приложений их как-то идентифицировать, чтобы в дальнейшем получить эти данные через WinAPI.
Записан
neversleep
Гость
« Ответ #4 : Август 19, 2013, 17:20 »

Еще как вариант, можно с SetWindowsHookEx поэкспериментировать.
Записан
Majestio
Гость
« Ответ #5 : Август 20, 2013, 10:30 »

В первом сообщении увидел словосочетание "в игровых клубах". Сразу вспомнились "дополнительные" моменты с манипуляциями окнами и процессами. Посмотрите заранее в сторону программы игровой защиты Frost и что она при работе вносит в систему. Программа по сути - руткит. Прячет процессы, хэндлы открытых окон отдает равными нулю. Вобщем, просто имейте ввиду - граби иногда лежат там, где их определенно не ждешь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.