Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
skreggi
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 16
#1

Запуск программ по расписанию - C++

20.04.2011, 22:48. Просмотров 1524. Ответов 7
Метки нет (Все метки)

Нужно реализовать программу на Microsoft Visual C++ которая бы запускала программы по заданному времени. Я её реализовал под Win32 Aplication. Расписание время и путь программ я указывал в файл shedule.reg , который я добавляю в реестр. А в программе я считываю расписания с реестра. Откомпелировалась без ошибок, но в итоге программы не запускаются по расписанию.
---------------------------------------------------------------------
файл shedule.reg

Код
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\shedule]

"1"="21:06 C:\\Windows\\System32\\calc.exe"
"2"="21:05 C:\\Windows\\System32\\cmd.exe"
"3"="21:11 C:\\Windows\\System32\\notepad.exe"
----------------------------------------------------------------------------
Исходник:

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// program.cpp : Defines the entry point for the application.
//
 
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#include "winioctl.h"
#include "shellapi.h"
 
 
// Функция проверки расписания в реестре
void CheckShedule(void);
 
char shed[30][3];
 
//оконная функция
LRESULT CALLBACK WindowProc(HWND hWnd, 
                    UINT message,
                    WPARAM wParam,
                    LPARAM lParam);
 
// основная функция
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// создания и заполнение структуры окна
WNDCLASS wcl;
wcl.style=CS_HREDRAW|CS_VREDRAW;
wcl.lpfnWndProc=WindowProc;
wcl.cbClsExtra=0;
wcl.cbWndExtra=DLGWINDOWEXTRA;
wcl.hInstance=hInstance;
wcl.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wcl.hCursor=LoadCursor(NULL, IDC_ARROW);
wcl.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wcl.lpszMenuName=NULL;
wcl.lpszClassName="WWW";
 
strcpy(shed[0], "1");
strcpy(shed[1], "2");
strcpy(shed[2], "3");
strcpy(shed[3], "4");
strcpy(shed[4], "5");
strcpy(shed[5], "6");
strcpy(shed[6], "7");
strcpy(shed[7], "8");
strcpy(shed[8], "9");
strcpy(shed[9], "10");
strcpy(shed[10], "11");
strcpy(shed[11], "12");
strcpy(shed[12], "13");
strcpy(shed[13], "14");
strcpy(shed[14], "15");
strcpy(shed[15], "16");
strcpy(shed[16], "17");
strcpy(shed[17], "18");
strcpy(shed[18], "19");
strcpy(shed[19], "20");
strcpy(shed[20], "21");
strcpy(shed[21], "22");
strcpy(shed[22], "23");
strcpy(shed[23], "24");
strcpy(shed[24], "25");
strcpy(shed[25], "26");
strcpy(shed[26], "27");
strcpy(shed[27], "28");
strcpy(shed[28], "29");
strcpy(shed[29], "30");
 
// регистрация класса окна
if (!RegisterClass(&wcl)) return 0;
// создания диалогового окна
HWND hWnd=CreateDialogParam(hInstance,"TESTWIN",NULL,NULL,NULL);
// прорисока окна 
ShowWindow(hWnd, nCmdShow);
// обновления окна
UpdateWindow(hWnd);
// установка таймера
SetTimer(hWnd, 1, 60000, NULL);
 
// цикл оброботки сообщений
MSG lpMsg;
while (GetMessage(&lpMsg, NULL, 0 ,0))
{
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
return lpMsg.wParam;
}
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
 
switch(message)
{
case WM_DESTROY: PostQuitMessage(0); break;
 
// если пришло сообщения от таймера, проверка расписания в реестре
case WM_TIMER:
 CheckShedule();
 break;
 
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
 
void CheckShedule(void)
{
 
// обьявления переменных
SYSTEMTIME time;
HKEY hOpen;
 
DWORD datatype, Buffsize;
long opRes;
 
char* szAlloc = "shedule\\";
char hour[3], minute[3], buff[1024];
 hour[2] = minute[2] = 0;
 
// открытия раздела реестра
opRes = RegOpenKey(HKEY_CURRENT_USER,szAlloc,&hOpen);
// если не открылся то сообщение и выход
if(opRes)
{
MessageBox(0, "Cannot open registry key!", "Error", MB_ICONSTOP);
return;
}
 
// получение текущего времени
GetLocalTime(&time);
 
for(int i = 0; i < 30; i++)
{
// чтение строки из реестра с временем и строкой запуска
if (RegQueryValueEx(hOpen,shed[i],NULL,&datatype,(BYTE*)buff,&Buffsize))
// если не прочитано то переход к следующей
continue;
 
// считывание времени запуска
hour[0] = buff[0];
hour[1] = buff[1];
minute[0] = buff[3];
minute[1] = buff[4];
 
// если текущее время равно считанному из реестра
if((atoi(hour) == time.wHour) && (atoi(minute) == time.wMinute))
{
// запуск программы
ShellExecute(0,"open", &buff[6], NULL, NULL, SW_SHOWNORMAL);
}
 
// обнуление буфера
memset(buff, 0, sizeof(buff));
 
 
 
}
 
}


-------------------------------------------------------------------------------

после компиляции пишет :

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\user32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\lpk.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\usp10.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\sechost.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\shell32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\imm32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\msctf.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Kaspersky Lab\Kaspersky Anti-Virus 2011\mzvkbd3.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\psapi.dll', no matching symbolic information found.
The thread 0x4DC has exited with code 0 (0x0).


Помогите пожалуйста разобратся!

заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zinador
2 / 2 / 0
Регистрация: 15.11.2009
Сообщений: 100
10.05.2011, 15:57     Запуск программ по расписанию #2
делай длл которая будет автоматически загружаться при запуске системы
skreggi
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 16
10.05.2011, 20:05  [ТС]     Запуск программ по расписанию #3
та вроде бы разобрался!
там не в ДЛЛ дело!
нужно вместо функции CreateDialogParam использовать CreateWindow))
как раз запустилось и всё работает)
но всё равно спасибо за помощь!
Kastaneda
11.05.2011, 15:48
  #4

Не по теме:

Цитата Сообщение от skreggi Посмотреть сообщение
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
strcpy(shed[0], "1");
strcpy(shed[1], "2");
strcpy(shed[2], "3");
strcpy(shed[3], "4");
strcpy(shed[4], "5");
strcpy(shed[5], "6");
strcpy(shed[6], "7");
strcpy(shed[7], "8");
strcpy(shed[8], "9");
strcpy(shed[9], "10");
strcpy(shed[10], "11");
strcpy(shed[11], "12");
strcpy(shed[12], "13");
strcpy(shed[13], "14");
strcpy(shed[14], "15");
strcpy(shed[15], "16");
strcpy(shed[16], "17");
strcpy(shed[17], "18");
strcpy(shed[18], "19");
strcpy(shed[19], "20");
strcpy(shed[20], "21");
strcpy(shed[21], "22");
strcpy(shed[22], "23");
strcpy(shed[23], "24");
strcpy(shed[24], "25");
strcpy(shed[25], "26");
strcpy(shed[26], "27");
strcpy(shed[27], "28");
strcpy(shed[28], "29");
strcpy(shed[29], "30");
)) а если бы нужно было 1000 строк заполнить? ))

skreggi
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 16
11.05.2011, 20:57  [ТС]     Запуск программ по расписанию #5
я знаю что можно через цикл просто не выходило зделать чтоб правильно работало,а так работает!
так чё мозги забивать
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.05.2011, 03:07     Запуск программ по расписанию #6
Цитата Сообщение от skreggi
так чё мозги забивать
C
1
2
3
4
    int i;
 
    for (i = 0; i < 30; i++)
        sprintf(shed[i], "%d", i + 1);
skreggi
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 16
12.05.2011, 23:45  [ТС]     Запуск программ по расписанию #7
спасибо за помощь, попробую!
только одно но sprintf функция которая распичатывает какой либо текст, а мне нужно скопировать strcpy в данном случае

Добавлено через 1 час 42 минуты
хотя нет я ошибался!
sprintf тоже работает))
наверн чтот перепутал...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 04:00     Запуск программ по расписанию
Еще ссылки по теме:

C++ WinAPI Запуск программ в определённое время
C++ Запуск программ из другой программы
Запуск программ по определенной схеме с использованием Fiber и Thread C++
C++ Builder Запуск программ из другой программы?
C++ Запуск программ через программу

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

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 04:00     Запуск программ по расписанию #8
есть семейство функций printf(), там много всяких функций
Yandex
Объявления
13.05.2011, 04:00     Запуск программ по расписанию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru