Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
1

Выполнение по расписанию.

15.08.2009, 19:39. Просмотров 2402. Ответов 15
Метки нет (Все метки)

Уважаемые, возникла не то, чтобы необходимость, но очень хотелось бы данное действо реализовать.
В общем в определенное время, к примеру 00-10, по системным часам нужно выполнить следующие действа:
разорвать имеющееся подключение, подождать немного, и снова подключить.
Вопрос непосредственно в том, как это сделать именно в 00-10, т.е. с помощью какой процедуры\функции.
В данный момент отключение-подключение выполняется с помощью .cmd и без автоматизьму, но хотелось бы перенести эту функции в свою программу, которая занята всеми остальными нужными мне настройками в системе.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2009, 19:39
Ответы с готовыми решениями:

Запуск программ по расписанию
Нужно реализовать программу на Microsoft Visual C++ которая бы запускала программы по заданному...

Выполнение задачи по расписанию
Добрый день! Имеется скрипт который выполняет определенную функцию по расписанию. В данный...

Выполнение действие по расписанию
Есть некая программа, которая должна выполнятся 24/7. Мне нужно выполнить некое действие(допустим...

Выполнение скрипта по расписанию
Добрый день. Помогите решить проблему, необходимо каждый день, вечером, запускать определённый...

Выполнение действий по расписанию
В моей программе пользователь может добавлять различные события и устанавливать время для них....

15
Delphin_KKC
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
15.08.2009, 19:48 2
Например так:
Бросить на форму таймер. Установить интервал например в 1 сек, в событии таймера получать текущее время, и если оно равно требуемому - запускать нужный пакетный файл.
0
Jnis
13 / 13 / 2
Регистрация: 06.01.2009
Сообщений: 70
15.08.2009, 20:09 3
как на счет того что бы в таймер толкнуть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "DateUtils.hpp"
BOOL Work=true;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   char HH=HourOf(Now()),
        MM=MinuteOf(Now());
   if(Work && HH==0 && MM==10){
      Work=false;
      /*Отключаем соединения*/
   }else if(!Work && HH==0 && MM==20){
      Work=true;
      /*Запускаем соединение*/
   }
}
Добавлено через 5 минут 37 секунд
Ну эт пример, если тебе интервал меньше минуты нужен, то например SS=SecondOf(Now()); воткни где надо.
1
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
20.08.2009, 23:43  [ТС] 4
с char выходит не совсем адекватно, заменил на int.
остался нерешенным вопрос с подключением\разрывом связи. Понятное дело что с помощью ras.h что-то шаманить надо, но вот какие конкретно функции отвечают за разрыв\подключение хотелось бы знать, и как их правильно использовать.

Добавлено через 1 час 27 минут 24 секунды
Хм, подключение всё-таки заработало, благодаря следующему:
C++
1
2
RASDIALDLG rasDlg = {sizeof(RASDIALDLG)};
RasDialDlg(NULL, TEXT("Имя подключения"), NULL, &rasDlg);
При условии необходимости стандартного подключения.

Остаётся лишь вопрос с разрывом. RasHangUp напрочь не могу понять как работает, просьба помочь
0
snake32
1864 / 1176 / 205
Регистрация: 26.02.2009
Сообщений: 4,505
Записей в блоге: 5
21.08.2009, 09:28 5
Eternal-Thunder, перед вызовом RasHangUp, вы должны определить хэндл. Открываем MSDN и смотрим что там написано:
This is a handle returned from a previous call to RasDial or RasEnumConnections.
То бишь можно воспользоватся одной из следующих ф-ий RasDial или RasEnumConnections.
0
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
21.08.2009, 14:00  [ТС] 6
snake32, я и пользуюсь RasEnumConnections, не знаю, может в коде где ошибка, кто сможет - поправьте, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{       HRASCONN hRasConn;
    RASCONN ras[10];
    DWORD  dSize, dCountConn;
 
    ras[0].dwSize = sizeof(RASCONN);
    dSize = sizeof(ras);
    RasEnumConnections(ras, &dSize, &dCountConn);
    for (DWORD i = 0;  i < dCountConn;  i++)
    {
        hRasConn = ras[i].hrasconn;
        RasHangUp(hRasConn);
    }
}
0
snake32
1864 / 1176 / 205
Регистрация: 26.02.2009
Сообщений: 4,505
Записей в блоге: 5
21.08.2009, 15:30 7
Eternal-Thunder, и у меня не получается, хочь ты тресни

RasEnumConnections возращает ноль, то есть ошибки нет, но и количество соединений тоже пишет ноль ( поледний параметр ф-ии ). Хотя есть соединение я ж в net'е щаз сижу.

Что ж ждёмс более опытных...
0
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
21.08.2009, 16:53  [ТС] 8
snake32, беда =\

Просьба к более опытным пользователям помочь
0
Otaka
1842 / 699 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
21.08.2009, 16:59 9
Я когда-то пытался изучать Shell Api, и для проги USDownloader решил сделать прожку, которая отключит мой ADSL интернет, а потом его включит снова, тем самым сменив IP адрес. Так вот я программно получал менюшку для ярлычка с моим подключением, программно щелкал там "Разъединить", а потом щелкал "Соединить". Когда появлялось окошко Подключение, я все так же програмно клацал на кнопку "Подключение". Пользуюсь до сих пор. А вот с Ras API помочь не могу, так как опыта в этом нету.
0
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
21.08.2009, 21:50  [ТС] 10
Otaka, оригинальное решение. исходник можете показать?
0
Otaka
1842 / 699 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
21.08.2009, 22:05 11
Конечно могу, но он на Visual C++. Там нужно глядеть в файл ifolder.cpp
Предупреждаю сразу, исходник не для слабонервных. Это моя первая программа с COM интерфейсами. Там почти нет никаких обработок ошибок, и освобождения памяти(почему-то всегда там выбивались ошибки, а у меня не было ни времени ни сил разбираться почему).
Там есть такие вот строки:

C++
1
2
3
4
char network_connections[]="Сетевые подключения";
char connection[]="Укртелеком";
char ConnectionDialog[]="Подключение: Укртелеком";
char ConnectionDialogButton[]="Подключение";
network_connections - название элемента "Сетевые подключения" в панели управления
connection - Это название того сетевого подключения которое нужно отключить/включить. У меня это "Укртелеком"
ConnectionDialog - название диалога который выскакивает при попытке создать подключение
ConnectionDialogButton - Кнопка которую нужно нажать, чтобы подключение началось.

Там поблема еще в том, что окошко диалога ищется просто после 2 секунд после попытки создать подключение.
Короче, разберетесь.
0
Вложения
Тип файла: rar ifolder.rar (24.9 Кб, 15 просмотров)
snake32
1864 / 1176 / 205
Регистрация: 26.02.2009
Сообщений: 4,505
Записей в блоге: 5
22.08.2009, 03:05 12
И всё таки, лично мне бы хотелось посмотреть на рабочий исходник через ф-ию RasEnumConnections.

Или хотябы объяснение почему не работает у нас с Eternal-Thunder.

А может это новая фишка-защита Windows XP SP3? Я просто не знаю что и думать.
0
Jnis
13 / 13 / 2
Регистрация: 06.01.2009
Сообщений: 70
23.08.2009, 12:23 13
Цитата Сообщение от Eternal-Thunder Посмотреть сообщение
с char выходит не совсем адекватно, заменил на int.
Ты на Char смотри как на целое число в диапазоне [-127;+128] и все будет адекватным, тк тебе нужно всего лишь [0;59]. Char занимает 1 байт, int 4 байта, зачем платить больше?
ЗЫ: в маленьких проектах данная проблема будет не очень заметна, но в крупных это ведет к ненужной потере памяти.
0
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
23.08.2009, 13:57  [ТС] 14
Jnis, при выводе чара таким образом выводило крокозябру и многоточкозапяточие, а инт показывает чиселки. проект маленький, так что 6 лишних байт, надеюсь не много изменят.

И всё таки, лично мне бы хотелось посмотреть на рабочий исходник через ф-ию RasEnumConnections.
Это точно, мне бы тоже очень хотелось.

А может это новая фишка-защита Windows XP SP3? Я просто не знаю что и думать.
у меня вроде бы SP2.
0
Jnis
13 / 13 / 2
Регистрация: 06.01.2009
Сообщений: 70
24.08.2009, 01:23 15
Может уже немного не в тему, но в далекое будущее..
Цитата Сообщение от Eternal-Thunder Посмотреть сообщение
Jnis, при выводе чара таким образом выводило крокозябру и многоточкозапяточие, а инт показывает чиселки. проект маленький, так что 6 лишних байт, надеюсь не много изменят.
Особенность типа char такова, что при запихивании в строковые типы, без явных тому указательств, число считается как символ и не конвертируется в цифры.
От крокозябры можно избавится двумя способами:
1) заменить char на unsigned char ; разница не велика, просто диапазон [0;255], но это уже не char, он считается числовым типом.
2) явно указать что мы хотим от числа, да и вообще от машины, как бы она вела себя по отношению к данным:
C++
1
2
3
Label1->Caption=(String) (unsigned char)MM + " : " + (int)SS;
//(String) говорит что все что правее будет рассматриватся как строка, иначе машина начнет пытаться  как-то сложить все, а потом еще и вывести
//(unsigned char) и (int) для явного указания в каком виде мы эти числа хотим видеть(можно оба int, разные взял для наглядности). Можно хоть long или даже BOOL(не bool)
0
Eternal-Thunder
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 19
24.08.2009, 20:33  [ТС] 16
Jnis, спасибо, приму к сведению, но в данный момент это не столь принципиально, как разорвать соединение, с помощью RasHangUp
На счёт "далекого" особенно порадовали, ещё раз спасибо.
0
24.08.2009, 20:33
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2009, 20:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выполнение кода по расписанию
Подскажите пожалуйста, как реализовать такие задержки, к примеру я хочу чтобы определенный метод...

Выполнение списка заданий по расписанию
Имеется список задач требующих выполнения. Каждая задача выполняется через определенные промежутки...

Выполнение действий по расписанию, в определенное время
как сделать что бы прога отслеживала время и если наступило к примеру 21:00 выполнила какие-то...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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