Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Мессага поверх окон чужих приложений...


Автор: Crash512 17.12.2006, 13:16
Пишу программу для администрирования компьютерного зала... Я знею, что таких прог уже десятки, но мне платят за исходник=) Столкнулся со следующей проблемой...

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

Видел подобную фишку в одной админской проге для клуба. Сообщение большими красными буквами выводилось вверху экрана. Сообщение моргало около 2х секунд, и пропадало... Надо сделать что-то подобное, но не представляю как...

Помогите разобраться!

Автор: Anikmar 17.12.2006, 13:24
Думаю тут без DirectX (или чего там еще) не обойтись - много игрух весьма критично относятся к смене расширения и режима работы экрана - например у меня X3 начисто слетает, если аська свое окошко выкидывает...

Автор: Crash512 17.12.2006, 15:18
Жесть... А чего же делать?.. Это важная функция для заказчика... Для меня она является самой сложной=)

Автор: Anikmar 17.12.2006, 15:29
1 Вариант - доверится виндам и размещать окошко StaOfTop - посмотреть что будет
2 Вариант более сложный - сначала определять в каком режиме находится экран и действовать по обстоятельствам. Если текущий режим не страдает экзотикой - то выводить стандартными методами, если нет - то уже думать

Автор: codelord 17.12.2006, 15:40
не знаком DX но нет ли такой возможности из буфера видюхи забрать картинку
переделать ее и вернуть назад. Лучше  обратиться в сооотв. раздел. 

Автор: Crash512 17.12.2006, 16:50
А больше никаких возможностей?..

Автор: codelord 17.12.2006, 23:09
Вот придумал сообразил такой вариант.
таймер надо выствить эдак на 100мсек:
никуда не денутся увидят smile
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 TCanvas * DeskTop = new TCanvas;
if (DeskTop)
        {
        DeskTop->Handle = GetDC(HWND_DESKTOP);
        DeskTop->Brush->Style = bsClear;
        DeskTop->Font->Size = 36;
        DeskTop->Font->Color=(TColor)RGB(255,0,0);
        DeskTop->Font->Style = TFontStyles() << fsBold;
        DeskTop->Font->Name = "Lucida Console";
        DeskTop->TextOut(1,1,"Ваше время заканчивается через 5 минут");
        ReleaseDC(0, DeskTop->Handle);
        }
delete DeskTop;
}


Добавлено @ 23:13 
а обновлять сообщение нужно по любому т.к. игра как правило около 60 кадров в сек обновляет экран..

Автор: Anikmar 18.12.2006, 00:07
Не прокатит. Это сообщение будет выдаваться на стол... А игруха будет висеть над ним. Надо выдавать в окно игрухи либо поверх всех.

Автор: codelord 18.12.2006, 00:12
Цитата(Anikmar @  17.12.2006,  20:07 Найти цитируемый пост)
Не прокатит. Это сообщение будет выдаваться на стол... А игруха будет висеть над ним. Надо выдавать в окно игрухи либо поверх всех

а ты попробуй.
а поверх всех не пойдет, игры вываливаются нафиг, CS точно.

Автор: Anikmar 18.12.2006, 00:14
codelord,  Вы меня оспариваете или соглашаетесь? Я говорю Не прокатит. А вы?

Автор: Crash512 18.12.2006, 00:16
codelord

Спасибо! Очень выручил!=))

Автор: Anikmar 18.12.2006, 00:25
Некторое время назад я был владельцем сети компьютерных клубов. Я знаю специфику работы в них и специфику характера геймеров.
Если вам поставили задачу именно так - мой совет переубедить заказчика, что такой функционал не нужен.

Аргументы:
Если это компьютерный клуб - туда ходят люди постоянные и любящие именно этот клуб. Если он зибились на пару ящиков пива, а вкритический момент у них вылетает игруха из-за админ-автомата и они не получают свой выигрышь - они больше в клуб не придут.

Если это просто хаос из игралдок-стрелялок и нужен контроль секунд, для того, чтобы выгнать вовремя геймера из-за игрушки - пусть заказчик лучше приобретет сеть игровых автоматов.

Выводы:
Не надо вмешиваться в игровой процесс геймера - это вредно влияет на его психику - дальше на его отношение к к лубу - дальше на бабло хозяина. Напоминать надо вежливо.

Решение:
1. Можно поставить сигнализацию у каждого компа с красной лампочкой, которая будет мигать при приблежении к порогу отключения. - Подключаем к порту и программируем резидента. Затраты примерно 30 уе на пост плюс программеру

2. Можно поставить громкую связь

3. Наилучшее на мой взгляд. Дать *%*?%: админам, чтобы им было не лень пойти и выгнать геймера с места (ВЕЖЛИВО), а вот на посты поставить маленького резидента - лога, который определяет - использовался комп или нет в этот момент времени. Дальше суммируем - и отдаем заказчику еженедельный отчет. А он пусть сам смотрит - нагревают его админы или нет.

Автор: Crait 18.12.2006, 03:34
Можно ещё формировать сообщение средствами звукового вывода.

Автор: witex 18.12.2006, 04:17
Звук отвлекает!

А вот на счёт подсказок.
Год назад, я работал  в одном копьютерном клубе. Так там, сразу поверх любых окон всегда наверху небольшой квадратик всегда был! И показывал, сколько осталось юзать пользователю комп. И там спокойной можно было подойти к админу и добавить время!
Допусти табличка зелёного цвета пока вемя больше 10 минут. жолтая когда больше 5 и красная когда уже остаёться 5 минут и меньше.
Самое удобное, не отвлекает ни кого и всем удобно. 
Так что луше постоянно маленькую мессагу сверху держать, чем выпрыгивала бы мессага.

Автор: Anikmar 18.12.2006, 09:35
А если этот квадратик закроет нужную информацию? Игрухи разные бывают...
Это конечно лично мое мнение, но любая лишняя информация будет мешать игровому процессу. Админский модуль на геймерской станции должен быть, но он не должен никоим образом мешать геймеру.
На рабочем месте админа должно все считаться, а вот в обязанности админа входит предупреждение геймера о заканчивающемся времени.

Автор: Crash512 18.12.2006, 20:52
Цитата(Anikmar @  18.12.2006,  00:25 Найти цитируемый пост)
Если вам поставили задачу именно так - мой совет переубедить заказчика, что такой функционал не нужен.


У меня нет ни одного аргумента для переубеждения заказчика... Я от его клуба ничего не получаю. За программу он мне платит деньги...=) Тут либо "се ля ви", либо "се ля вас"=))

Автор: Anikmar 19.12.2006, 10:50
Цитата

У меня нет ни одного аргумента для переубеждения заказчика... Я от его клуба ничего не получаю. За программу он мне платит деньги...=) Тут либо "се ля ви", либо "се ля вас"=)) 


В качестве аргумента можно привести мои доводы, как человека это все прошедшего. Если хочется клуб раскрутить на полную - надо меньше автоматики, а больше человеческого общения - проверено на 100%

Автор: Crash512 19.12.2006, 20:14
Я конечно всё понимаю, и доводы Ваши уважаю... Но я к клубу никакого отношения не имею=) Поэтому мне остаётся лишь делать программу... Если я отговорю заказчика, не получу денег... Вот и всё... 

Автор: Anikmar 20.12.2006, 11:23
Цитата(Crash512 @ 19.12.2006,  20:14)
Я конечно всё понимаю, и доводы Ваши уважаю... Но я к клубу никакого отношения не имею=) Поэтому мне остаётся лишь делать программу... Если я отговорю заказчика, не получу денег... Вот и всё...

Ни в коем случае нехочу навязывать свое мнение. В конце концов кто девушку ужинает тот ее и танцует - тут вы абсалютно правы.

На мой взгляд этот функционал будет достаточно сложно реализовать - на простых режимах не вопрос, а вот в более навороченных игрухах мне кажется будет полно глюков. Примером ставлю все тот же X3 - это настолько жадная до рессурсов игруха, что я просто ужаснулся. Из-за стандартных виндовских напоминалок (типа оутлука), аськи и тому подобных вещей слетает намертво и даже вешает истему. Я думаю что игрух такого класса будет сейчас все больше.

Главное, чтобы заказчик во время  бета-тестирования не нарвался на эти глюки (а то еще не заплатит). Или потом, чтобы он предъявами не завалил - типа я заплатил, а твое [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] не работает (я бывал как в роли заказчика так и в роли программера-исполнителя - у меня такие случаи были). И доказывай потом, что это дядя Билли криво написал систему...

Ну а если на практике - я бы начал с реализации основного функционала:
1. Серверная часть. Стоит на админской машине и посылает команды клиентам.
2. Клиентская часть принимает команды от серверной - начать отсчет, заблокировать комп и т.п.

После того как связка реализована уже приступать к визуализации сообщения. Начать с обычного выскакивающего окошка виндов - можно без рамки, с прозрачным фоном и обычными цифрами - типа пора закругляться. А дальше уже отлаживать на всех режимах, которые под рукой.

Автор: Crash512 20.12.2006, 11:49
Anikmar,

Обижаете=)) Сервер клиент-сервер уже написаны..=) 

Автор: Anikmar 20.12.2006, 16:08
Цитата(Crash512 @ 20.12.2006,  11:49)
Anikmar,

Обижаете=)) Сервер клиент-сервер уже написаны..=)

Отлично.
Тогда см. выше
Цитата

После того как связка реализована уже приступать к визуализации сообщения. Начать с обычного выскакивающего окошка виндов - можно без рамки, с прозрачным фоном и обычными цифрами - типа пора закругляться. А дальше уже отлаживать на всех режимах, которые под рукой. 


Я бы начал со стандартных средств и посмотрел как винда с этим справится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)