Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3  Все   Вниз
  Печать  
Автор Тема: Утилита для ограничения времени работы за компьютером  (Прочитано 59897 раз)
0 Пользователей и 1 Гость смотрят эту тему.
v.korleone
Помогающий

ua
Offline Offline

« : 09-09-2009 14:27 » 

Здравствуйте, господа программисты! Получил задание на курсовой проэкт, разработать утилиту для ограничения времени работы за компьютером.
1. Програма должна предоставлять следующие возможности:
  • введение промежутка времени, в течение которого выполняется активная работа пользователем, и время перерыва;
  • блокировка работы компьютера на заданное время отдыха: пользователь не должен иметь возможности работать с открытыми приложениями.
2. Обязательные элементы программы:
  • программа должна быть выполнена в виде службы (ее значок должен содержаться в области извещений);
  • программа должна давать возможность вводить время активной работы и час отдыха (в минутах);
  • таймер должен включаться при любом активном действии пользователя (нажатие клавиши клавиатуры или движение мышью);
  • если больше трех минут нет активности пользователя (нажатие клавиш клавиатуры или движений мыши), таймер должен останавливаться;
  • после завершения периода активной работы должно выводиться окно программы (с сообщением о необходимом отдыхе), из которого нельзя выйти доступными путями.
3.Программа должна иметь инсталляционный пакет, который содержит все необходимы файлы для работы программы
Думаю писать в MS Visual Studio Net.2003. Подскажите с чего следует начинать, может ссылочкой поделитесь. Буду благодарен за любую информацию, которая поможет при написании КП.
« Последнее редактирование: 09-09-2009 14:32 от v.korleone » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-09-2009 20:04 » 

Лучше 2005 или 2008 студия - там инсталляционные пакеты (как тип проекта) есть.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
yurza_81
Гость
« Ответ #2 : 10-09-2009 01:56 » 

Windows HOOK в этом направление надо копать (ну либо перехват Сплайсингом или коректировка IAT)
P.S. Прикольные у вас курсовые
Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #3 : 10-09-2009 06:29 » 

Dimka, спасибо, буду знать. Когда-то ставил 2008, она меня просто выводила из себя - сидишь себе в нете (студия выключена) раз тебе, сообщение о обнаружении ошибки студией, и  предложении об исправление, но чтобы ты не выбирал - связь пропадает. Так, что с 2008 очень натянутые отношения. Будем пробовать - 2005.
yurza_81, спасибо почитаю.
Цитата
P.S. Прикольные у вас курсовые
Даже очень, учитывая, что курс програмирования на С, отчитали полгода, с формами вообще не работали, ну не програмитсы мы и вот тебе, такие сюрпризы...   
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 10-09-2009 15:12 » 

v.korleone, у меня работает 2008 - проблем нету (одна только - во время отладки, бывает, наглухо зависает, лечится ребутом Отлично )

А в дотнете (частности C#) есть фишка - он запускает сетевой процесс, похожий на имя проекта. Как лечится, см тут
https://forum.shelek.ru/index.php/topic,21361.0
Записан

v.korleone
Помогающий

ua
Offline Offline

« Ответ #5 : 10-09-2009 15:31 » 

Алексей1153++, спасибо, по-моему, было нечто похожее, поставлю студию, попробую.

Думаю начать с функций типа: SetTimer(HWND hwnd, UINT idTimer, UINT uTimeout, TIMERPROC tmprc) (информация взята отсюда http://visual-book.net/ и не вдохновляет  Не понял). Люди, киньте, пожалуйста, что-то почитать по теме.
« Последнее редактирование: 16-09-2009 05:03 от Sel » Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 15-09-2009 16:13 » 

v.korleone Ты уж извини, но на мой взгляд (субъективный) Тебе не суждено написать данную софтину. Слишком глубоких познаний требуется по той системе в которой будет крутиться данное приложение. Ты таким знаниями не располагаешь.
Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #7 : 15-09-2009 16:18 » 

Serg79,  Жаль Жаль Жаль
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 16-09-2009 02:57 » 

v.korleone, не слушай, грызи - и оно разгрызётся Ага
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 16-09-2009 06:07 » 

Как-то я не могу понять а в чем собственно проблема?
ТЗ составлено достаточно четко.
нужно действовать по пунктам ТЗ.
И... все получится.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #10 : 16-09-2009 09:01 » 

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

В твоем случае я пошел бы следующим путем:

1. Написал бы прогу которая просто висит в трее и по нажатии правой кнопки мыши показывает менюшку с парой-тройкой пунктов.
2. Одним из пунктов сделал бы "Старт таймер", другим "Показать время таймера"
3. Научился бы стартовать таймер и узнавать его текущее время
После этого у тебя будет каркас приложения, с помощью которого будет гораздо легче отлаживать (пробовать) другие, более сложные вещи, а именно:


4. Нашел бы как делать окно "из которого нельзя выйти доступными путями". -- мне кажется это проще, чем пункт 6. и потом, если время будет поджимать, можно будет добавить в менюшку пункт "Установить таймер", и , ИМХО, будет готово решение, которое (повторюсь -- если нет времени и деваться некуда) можно показывать и надеяться на какую-то оценку...

5. Научиться делать инсталляторы. Опять же проще чем 6. , а как показывает практика -- "красивая обертка" -- гораздо больше чем "половина дела". 
На этом этапе у тебя есть почти ВСЕ задание кроме всего лишь одного пункта Ага


6. Научился узнавать о том что юзер двигает мышкой и тыкает кнопки. И "прикрутить"  эти знания к твоей проге.


Удачи  Действовать надо быстро




P.S.
Ответ, на вопросы типа "где мне почитать про...." в лучшем случае -- MSDN Улыбаюсь
Зато на вопросы, на которые нужно ответить "Да" или "Нет" ответы приходят гораздо быстрее Ага

Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #11 : 16-09-2009 10:02 » 

Артем, я как раз на том пути, который ты предлагаешь (мне он тоже показался дельным). Добрые люди, поделились исходником таймера, сижу разбираюсь с его работой. Учу новые функции, работу с окном приложения (до этого была только консоль), в общем по совету Алексей1153++ - грызу, с надеждой разгрызть.
« Последнее редактирование: 16-09-2009 10:47 от v.korleone » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 16-09-2009 10:10 » 

Что значит "поделитесь исходником таймера"?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
v.korleone
Помогающий

ua
Offline Offline

« Ответ #13 : 16-09-2009 10:14 » 

Джон, читайте внимательно текст  Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 16-09-2009 10:46 » 

Что понимаешь под ИСХОДНИКОМ ТАЙМЕРА?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
v.korleone
Помогающий

ua
Offline Offline

« Ответ #15 : 16-09-2009 10:49 » 

Понимаю, программу-таймер с исходным кодом.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 16-09-2009 10:51 » 

v.korleone, тебе надо не исходник, а завести таймер (SetTimer()) , а потом ловить сообщение WM_TIMER
Записан

v.korleone
Помогающий

ua
Offline Offline

« Ответ #17 : 16-09-2009 11:08 » 

Алексей1153++, у меня есть готовая, рабочая программа-таймер, думал разбираться по ней. Но учитывая ваши пожелания, нашел статью по теме, буду учится по статье: http://www.cyberguru.ru/cpp-sources/system/ispolzovanie-tajmerov.html
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 16-09-2009 11:12 » new

v.korleone, для понимания не нужна программа-таймер, нужно лишь прочитать описание  SetTimer Улыбаюсь
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 16-09-2009 11:14 » 

Строго говоря, в MSDN и демонстрационный код ("программа-таймер") есть: http://msdn.microsoft.com/en-us/library/ms644901%28VS.85%29.aspx
« Последнее редактирование: 16-09-2009 11:17 от Вад » Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #20 : 16-09-2009 11:43 » 

Вад, спасибо за ссылку. Я в ссылке приведеной мной выше, нашел этот пример, но на русском языке, что для меня немаловажно. Пробовал копипастить - увы  Улыбаюсь Будем разбираться пошагово (пожалуйста, не судите):
Код:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
HANDLE hwnd; //дескриптор файла

// Устанавливаем два таймера.
// 1-й
SetTimer(hwnd, // хэндл главного окна
          IDT_TIMER1, // идентификатор таймера
          10000, // интервал - 10 секунд
          (TIMERPROC) NULL); // процедуры таймера нет
// 2-й
SetTimer(hwnd, // хэндл главного окна
          IDT_TIMER2, // идентификатор таймера
          300000, // пяти-минутный интервал
          (TIMERPROC) NULL); // процедуры таймера нет

case WM_TIMER:
switch (wParam)
{
case IDT_TIMER1:  // обрабатываем 10-ти секундный таймер
        return 0;
case IDT_TIMER2: // обрабатываем пятиминутный таймер
        return 0;
}
// Удаляем таймеры.
KillTimer(hwnd, IDT_TIMER1);
KillTimer(hwnd, IDT_TIMER2);

Скажите, пожалуйста, какого типа ставить IDT_TIMER1? Если вопрос не понятен (могу не правильно употреблять терминологию), то имею ввиду, что hwnd типа HANDLE, какого типа ставить IDT_TIMER1?


upd научись форматировать код
« Последнее редактирование: 16-09-2009 11:55 от Sla » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 16-09-2009 11:53 » 

v.korleone, а прототип KillTimer смотрел ? Ага
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 16-09-2009 11:57 » 

Целочисленного типа. Вообще, согласно документации, UINT_PTR. Что означает - беззнаковое целое (минимум - 32битное).
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 16-09-2009 12:36 » 

v.korleone, вот смотри. Итак ясно, что ты новичок. По идее написать код работающий по таймеру дело пары минут. Но это противоречит философии нашего форума. Поэтому тебе и "помогают" ссылками и советами. Ибо когда ты его наконец-таки сделаешь, а ты его сделаешь, ты сам скажешь: "блин как всё просто!".

Но несмотря на это. Почему ты начинаешь со сложностей? Почему у тебя ДВА таймера? Разберись с одним, после этого можешь хоть миллион их делать. Не надо заниматься тупым копированием кода ДАЖЕ из MSDN, в надежде, что он заработает. Это просто здорово, что он у тебя не заработал. Иначе бы ты успокоился и "пошёл дальше" толком не разобравшись.

Лучше сначала разобраться, что там происходит, зачем тот или иной параметр и написать свой! код. Если тебе непонятны параметры ф-ции SetTimer, посмотри MSDN (или где ещё). Там всегда обязательно указан тип параметров.


зы Вопрос немного не в тему VS от микрософта и чистое WinApi? Требования такие?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
v.korleone
Помогающий

ua
Offline Offline

« Ответ #24 : 16-09-2009 17:07 » 

Джон, VS - Microsoft (хотя требований небыло никаких).
Цитата
Лучше сначала разобраться, что там происходит, зачем тот или иной параметр и написать свой! код.
- согласен.
« Последнее редактирование: 17-09-2009 05:36 от v.korleone » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #25 : 16-09-2009 20:15 » 

Джон, VS - Microsoft (хотя требований небыло никаких).

Я в том плане, а почему не MFC?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
v.korleone
Помогающий

ua
Offline Offline

« Ответ #26 : 17-09-2009 05:37 » 

Джон, нам было сказано, что стиль вольный хотите MFC, хотите... Я не особо понимаю, что такое MFC и почему его, судя из твоих слов, предпочтительней использовать. Можешь объяснить?
Пробую разобраться с таймером:
Код:
int main()
{
HANDLE hwnd; //дескриптор файла
UINT_PTR IDT_TIMER1; // тип таймера
WPARAM wParam;
SetTimer(hwnd, // хэндл главного окна
IDT_TIMER1, // идентификатор таймера
10000, // интервал - 10 секунд
(TIMERPROC) NULL); // процедуры таймера нет
case WM_TIMER:
switch (wParam)
{
case IDT_TIMER1:
// обрабатываем 10-ти секундный таймер
return 0;
}
// Удаляем таймер.
KillTimer(hwnd, IDT_TIMER1);
getch();
return 0;
}
Напротив строчек "(TIMERPROC) NULL" и "KillTimer(hwnd, IDT_TIMER1)" - пишет это "error C2664: 'SetTimer' : cannot convert parameter 1 from 'HANDLE' to 'HWND'  Conversion from 'void*' to pointer to non-'void' requires an explicit cast"
По поводу "case WM_TIMER:" пишет error C2046: illegal case.
По поводу "case IDT_TIMER1:" пишет error C2051: case expression not constant
Напротив "{" после "return 0;" пишет warning C4060: switch statement contains no 'case' or 'default' labels
« Последнее редактирование: 17-09-2009 06:59 от v.korleone » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #27 : 17-09-2009 07:42 » 

Посмотри:
https://forum.shelek.ru/index.php/topic,6471.msg104003.html#msg104003

В трёх словах: с MFC проще.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #28 : 17-09-2009 12:43 » 

Ой Джон, пугают меня такие утверждения "в трех словах"...  особенно адресованные человеку, которому:

Цитата: v.korleone
 курс програмирования на С, отчитали полгода, с формами вообще не работали, ну не програмитсы мы и вот тебе, такие сюрпризы...  

Вряд ли C MFC проще тому, у кого не то что с АПИ не очень получается, но и проблемы со стандартными операторами типа switch...  
Кстати, а почему MFC, а не .NET ?  топикстартеру все равно, а .NET -- более новая (и как везде пишут "более перспективная"), а про MFC, вроде как ходили слухи, что ее перестали поддерживать (хотя тут я могу ошибаться).


v.korleone,  сколько у тебя времени на выполнение задания? Похоже программирование -- это ваша далеко не основная специальность и это задание из разряда "сдал и забыл"
Если у тебя меньше чем несколько месяцев, то,  может,  имеет смысл найди человека, который сделает это задание "за деньги" (это не я Улыбаюсь ) ?  

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

P.S. и действительно определись на чистом ли API ты пишешь, или применяя какие-либо библиотеки (например MFC).

P.P.S. если есть желание разбираться, то,  ИМХО (!), лучше с "чистым API", т.к. в этом случае быстрее, ИМХО (!) придет понимание "как оно живет", чем если пользоваться "обертками", которые как раз и скрывают большинство деталей и тонкостей
 
P.P.P.S. По поводу твоего последнего приведенного кода:
 первый параметр функции SetTimer должен быть типа HWND
 case нельзя писать вне switch
 IDT_TIMER1 - должен быть константой, такого же типа как и wParam

P.P.P.P.S. Проверь у препода, не перепутал ли он задание  Ага
« Последнее редактирование: 17-09-2009 12:59 от Артем » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #29 : 17-09-2009 13:57 » 

Ой Джон, пугают меня такие утверждения "в трех словах"...  особенно адресованные человеку...

Это я чтоб заинтриговать. Ага

Цитата
Вряд ли C MFC проще тому, у кого не то что с АПИ не очень получается, но и проблемы со стандартными операторами типа switch... 

Эммм я не совсем то имел ввиду. Я про то, что с объектами проще работать. API по-любому нужно для понимания происходящего, но он не объектно ориентирован. MFC конечно тоже не pure OOP, но всё-таки некоторые вещи удобней изучать. На примере тоже "таймера". Используя болванку студии (диалог), я могу сразу приступить к изучению таймера. С API мне сначала надо сделать кучу "вспомогательных" и также непонятных вещей.

Цитата
Кстати, а почему MFC, а не .NET ?  топикстартеру все равно, а .NET -- более новая (и как везде пишут "более перспективная"), а про MFC, вроде как ходили слухи, что ее перестали поддерживать (хотя тут я могу ошибаться).

Ошибаешься, в 2008 студии MFC после долгих лет "застоя" (практически никаких радикальных изменений начиная с 6ой версии студии MFC 4.2 не было, так по мелочам) можно сказать впервые получил мощный апдейт.
Вот тут можешь глянуть:  http://msdn.microsoft.com/en-us/library/bb984556.aspx
« Последнее редактирование: 17-09-2009 14:03 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1] 2 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines