v.korleone
Помогающий
Offline
|
|
« : 09-09-2009 14:27 » |
|
Здравствуйте, господа программисты! Получил задание на курсовой проэкт, разработать утилиту для ограничения времени работы за компьютером. 1. Програма должна предоставлять следующие возможности:- введение промежутка времени, в течение которого выполняется активная работа пользователем, и время перерыва;
- блокировка работы компьютера на заданное время отдыха: пользователь не должен иметь возможности работать с открытыми приложениями.
2. Обязательные элементы программы:- программа должна быть выполнена в виде службы (ее значок должен содержаться в области извещений);
- программа должна давать возможность вводить время активной работы и час отдыха (в минутах);
- таймер должен включаться при любом активном действии пользователя (нажатие клавиши клавиатуры или движение мышью);
- если больше трех минут нет активности пользователя (нажатие клавиш клавиатуры или движений мыши), таймер должен останавливаться;
- после завершения периода активной работы должно выводиться окно программы (с сообщением о необходимом отдыхе), из которого нельзя выйти доступными путями.
3.Программа должна иметь инсталляционный пакет, который содержит все необходимы файлы для работы программыДумаю писать в MS Visual Studio Net.2003. Подскажите с чего следует начинать, может ссылочкой поделитесь. Буду благодарен за любую информацию, которая поможет при написании КП.
|
|
« Последнее редактирование: 09-09-2009 14:32 от v.korleone »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 09-09-2009 20:04 » |
|
Лучше 2005 или 2008 студия - там инсталляционные пакеты (как тип проекта) есть.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
yurza_81
Гость
|
|
« Ответ #2 : 10-09-2009 01:56 » |
|
Windows HOOK в этом направление надо копать (ну либо перехват Сплайсингом или коректировка IAT) P.S. Прикольные у вас курсовые
|
|
|
Записан
|
|
|
|
v.korleone
Помогающий
Offline
|
|
« Ответ #3 : 10-09-2009 06:29 » |
|
Dimka, спасибо, буду знать. Когда-то ставил 2008, она меня просто выводила из себя - сидишь себе в нете (студия выключена) раз тебе, сообщение о обнаружении ошибки студией, и предложении об исправление, но чтобы ты не выбирал - связь пропадает. Так, что с 2008 очень натянутые отношения. Будем пробовать - 2005. yurza_81, спасибо почитаю. P.S. Прикольные у вас курсовые Даже очень, учитывая, что курс програмирования на С, отчитали полгода, с формами вообще не работали, ну не програмитсы мы и вот тебе, такие сюрпризы...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 10-09-2009 15:12 » |
|
v.korleone, у меня работает 2008 - проблем нету (одна только - во время отладки, бывает, наглухо зависает, лечится ребутом ) А в дотнете (частности C#) есть фишка - он запускает сетевой процесс, похожий на имя проекта. Как лечится, см тут https://forum.shelek.ru/index.php/topic,21361.0
|
|
|
Записан
|
|
|
|
v.korleone
Помогающий
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
|
|
« Ответ #6 : 15-09-2009 16:13 » |
|
v.korleone Ты уж извини, но на мой взгляд (субъективный) Тебе не суждено написать данную софтину. Слишком глубоких познаний требуется по той системе в которой будет крутиться данное приложение. Ты таким знаниями не располагаешь.
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 16-09-2009 02:57 » |
|
v.korleone, не слушай, грызи - и оно разгрызётся
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 16-09-2009 06:07 » |
|
Как-то я не могу понять а в чем собственно проблема? ТЗ составлено достаточно четко. нужно действовать по пунктам ТЗ. И... все получится.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Артем
Опытный
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
Помогающий
Offline
|
|
« Ответ #11 : 16-09-2009 10:02 » |
|
Артем, я как раз на том пути, который ты предлагаешь (мне он тоже показался дельным). Добрые люди, поделились исходником таймера, сижу разбираюсь с его работой. Учу новые функции, работу с окном приложения (до этого была только консоль), в общем по совету Алексей1153++ - грызу, с надеждой разгрызть.
|
|
« Последнее редактирование: 16-09-2009 10:47 от v.korleone »
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Помогающий
Offline
|
|
« Ответ #13 : 16-09-2009 10:14 » |
|
Джон, читайте внимательно текст
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Помогающий
Offline
|
|
« Ответ #15 : 16-09-2009 10:49 » |
|
Понимаю, программу-таймер с исходным кодом.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 16-09-2009 10:51 » |
|
v.korleone, тебе надо не исходник, а завести таймер (SetTimer()) , а потом ловить сообщение WM_TIMER
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 16-09-2009 11:12 » |
|
v.korleone, для понимания не нужна программа-таймер, нужно лишь прочитать описание SetTimer
|
|
|
Записан
|
|
|
|
|
v.korleone
Помогающий
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 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 16-09-2009 11:53 » |
|
v.korleone, а прототип KillTimer смотрел ?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #22 : 16-09-2009 11:57 » |
|
Целочисленного типа. Вообще, согласно документации, UINT_PTR. Что означает - беззнаковое целое (минимум - 32битное).
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Помогающий
Offline
|
|
« Ответ #24 : 16-09-2009 17:07 » |
|
Джон, VS - Microsoft (хотя требований небыло никаких). Лучше сначала разобраться, что там происходит, зачем тот или иной параметр и написать свой! код. - согласен.
|
|
« Последнее редактирование: 17-09-2009 05:36 от v.korleone »
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Помогающий
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 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #27 : 17-09-2009 07:42 » |
|
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #28 : 17-09-2009 12:43 » |
|
Ой Джон, пугают меня такие утверждения "в трех словах"... особенно адресованные человеку, которому: курс програмирования на С, отчитали полгода, с формами вообще не работали, ну не програмитсы мы и вот тебе, такие сюрпризы...
Вряд ли 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 - должен быть константой, такого же типа как и wParamP.P.P.P.S. Проверь у препода, не перепутал ли он задание
|
|
« Последнее редактирование: 17-09-2009 12:59 от Артем »
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
|