Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Maynard

Нужно прикрутить таймер к небольшой программке (Visual Studio 2008)

27.03.2010, 20:34. Показов 2349. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для начала хочу всех поприветствовать! Здрасьте!

Это мой первый пост и первая просьба на этом форуме, поэтому попрошу сильно не бить, если что нарушил или написал не туда.

В-общем, проблема такая, есть программка (простенькая, кода буквально на два экрана). Она рабочая, но к ней нужно прикрутить одну функцию. Я уверен, что для гуру программирования это не составит большого труда, т.к. сам понимаю, что это легко, но доделать не могу, и вот почему... На паре полностью довести программу до ума мне не удалось (хотя почти всё сделал), дома у меня компилятора сейчас нет, у друзей-знакомых, к сожалению, его также не оказалось, а в нашем городе-деревне скачать установочник такого размера из глобала можно за несколько дней. Собственно, скачкой Visual Studio 2008 я сейчас и занимаюсь, но до её окончания ещё буквально несколько суток, а результат мне нужен к послезавтрашнему дню. А писать программу "на ощупь" и без помощи MSDN я пока не умею. Надеюсь, что скоро опыта поднаберусь). Поэтому очень надеюсь на то, что кто-нибудь доведёт мою программу до ума.

Собственно, вот код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
void main()
{
    char cKey;
    char sCommand[100];
    STARTUPINFOA si;
    PROCESS_INFORMATION pi[100];
    int iIndexPi = 0;
    int ID;
 
    // Preliminary memory clearing
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
 
    printf("Press \"Enter\" to create a new process.\n"
            "Press \"Space\" to destroy the process.\n"
            "Press \"Esc\" to exit.\n\n\n");
 
    // Инициализация массива
    for(int i = 0; i < 100; i++)
    {
        pi[i].hProcess = NULL;
    }
 
    while(1)
    {
        cKey = getch();
        switch (cKey)
        {
        case 0x0d:  // Enter
            {
                printf("\nEnter the command:\n");
                scanf("%s", sCommand);
 
                for(int i = 0; i < 100; i++)
                {
                    if (pi[i].hProcess == NULL)
                    {
                        iIndexPi = i;
                        break;
                    }
                }
 
                // Creation of process
                if (!CreateProcessA(0, sCommand, 0, 0, 0, 0, 0, 0, &si, &pi[iIndexPi]))
                {
                    printf(0, "Error at process creation", "The sample", MB_OK);
                    getch();
                    // Closing of unneeded handle to first created thread
                    CloseHandle(pi[iIndexPi].hThread);
                    exit(0);
                }
 
                // Closing of unneeded handle to first created thread
                CloseHandle(pi[iIndexPi].hThread);
 
                printf("New process have been started\nID=%d\n", iIndexPi);
                break;
            }
        case 0x20:  // Space
            {
                printf("\nEnter the ID of command:\n");
                scanf("%d", &ID);
 
                if(TerminateProcess(pi[ID].hProcess, 1))
                {
                    printf("\The process ID=%d have been finished\n", ID);
                    pi[ID].hProcess = NULL;
                    CloseHandle(pi[ID].hProcess);
                    iIndexPi--;
                }
                else
                {
                    printf("\nError of TerminateProcess");
                }
                break;
            }
        case 0x1b:  // Esc
            {
                for(int i = 99; i >= 0; i--)
                {
                    TerminateProcess(pi[i].hProcess, 1);
                    CloseHandle(pi[i].hProcess);
                }
 
                exit(0);
                break;
            } // конец case 0x1b:
        } // конец switch (cKey)
    } // конец while(1)
}
Программа не требует какого-то хитроумного запуска. Просто создаём обычный новый проект, впихиваем туда этот код в .cpp файл и компилируем, всё работает.

Программа после запуска открывает и закрывает стандартные виндовские приложения по команде пользователя. Например, жмём Enter, пишем "calc", открывается калькулятор. Пишем "mspaint", открывается paint, и т.д. После нажатия пробела и выбора номера соответствующего открытого приложения, оно закрывается. Так вот мне ко всему этому великолепию) нужно прикрутить функцию, чтобы при открытии приложения, вместе с ним запускался таймер (можно не выводить на экран), который по достижении определённого своего значения, это приложение закрывал. То есть, например, открыли с помощью программы калькулятор, а через 20 секунд после появления, он сам закрывается. Вот такая небольшая фича мне нужна.

Если кто доведёт мою программу до ума за сегодня-завтра буду премного благодарен. Надеюсь на вашу помощь. Всем спасибо за внимание!

Добавлено через 6 минут
Хм, вот уже увидел то, за что меня нужно бить. Подскажите, пожалуйста, как сделать, чтобы код, выложенный сюда, на форум, нормально отображался? В окне редактирования сообщения всё выглядит прекрасно, с символами табуляции, а на деле всё "в столбик" записалось. Почему и как исправить?
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2010, 20:34
Ответы с готовыми решениями:

Написать программу. Задания нужно выполнять на языке Visual C++ в среде Microsoft Visual Studio 2008
Можете написать программу? Задание по номером 3.24 (2 рисунок).

Нужно написать программу (структуры) на С++ в MS Visual Studio 2008
1. Описать структуру с именем WORKER , содержащую следующие поля: фамилия и инициалы работника; название занимаемой должности; ...

Нужно написать программу(Двумерный массив) в Visual Studio 2008
Дана целочисленная прямоугольная матрица. Определить: 1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2010, 20:34
Помогаю со студенческими работами здесь

создание в Visual Studio 2010 графической оболочки к программке на с++
Есть скомпилированная программа, вопрос как соединить в проекте файлы .cpp и Windous Forms?

Visual Studio 2005 и Visual Studio 2008 сильно ли они отличаются друк от друга?
привет ребята:) вот у меня есть Visual Studio 2005 и Visual Studio 2008 возник вопрос сильно ли они отличаются друк от друга? пробывал...

Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual studio 2008
Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual...

Конвертация(или сохранение) проектов Visual Studio 2008 c# в Visual Studio 2005 c#
Доброго времени суток =) Можно ли, конвертировать проект или же сохранить под другую версию программы(например MS Word 2007 может...

Как открыть проект созданный в Visual Studio 2012 в Visual Studio 2008?
Нашел здесь же тему открытия Visual Studio 2012 в Visual Studio 2010 там написано так. Открыть файл проекта (.sln) с помощью блокнота и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru