Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа, которая зависит от времени и даты. 
:(
    Опции темы
Toyamatokanava
  Дата 7.1.2013, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Подскажите код на примере обычного консольного приложения, которое вывозит слово ,, привет мир,,. Можно ли с помощью языка с++ создать приложение, которое будет запускаться в определенное время и  дату ? 

Это сообщение отредактировал(а) Toyamatokanava - 8.1.2013, 00:08
PM MAIL   Вверх
bsa
Дата 8.1.2013, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Пример кода тут: http://forum.vingrad.ru/index.php?show_typ...&kw=faq-c++

Цитата(Toyamatokanava @  8.1.2013,  00:51 Найти цитируемый пост)
Можно ли с помощью языка с++ создать приложение, которое будет запускаться в определенное время и  дату 
Ответ: можно. Можно сделать на любом языке, который позволит итоговому коду запускаться на конкретной ОС. Запуск приложений в указанное время осуществляет специальная служба системы - шедулер (например, в UNIX это cron, а в Windows, кажется, Назначенные задания или Планировщик заданий - поищи в панели управления или в разделе Специальное меню Пуск)
PM   Вверх
NoviceF
Дата 8.1.2013, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(Toyamatokanava @  8.1.2013,  00:51 Найти цитируемый пост)
Можно ли с помощью языка с++ создать приложение, которое будет запускаться в определенное время и  дату ? 


Можно сделать приложение, которое ты запускаешь, оно тихо висит в процессах, ничего не делает, а потом, в определённые дату и время, делает какое-либо действиет.
PM MAIL   Вверх
Toyamatokanava
Дата 8.1.2013, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(bsa @ 8.1.2013,  00:26)
Пример кода тут: http://forum.vingrad.ru/index.php?show_typ...&kw=faq-c++

Цитата(Toyamatokanava @  8.1.2013,  00:51 Найти цитируемый пост)
Можно ли с помощью языка с++ создать приложение, которое будет запускаться в определенное время и  дату 
Ответ: можно. Можно сделать на любом языке, который позволит итоговому коду запускаться на конкретной ОС. Запуск приложений в указанное время осуществляет специальная служба системы - шедулер (например, в UNIX это cron, а в Windows, кажется, Назначенные задания или Планировщик заданий - поищи в панели управления или в разделе Специальное меню Пуск)

Спасибо огромное, с помощью планировщика можно сделать то, что я думал, но пожалуй я пока не в силах из-за недостатка знаний в WinApi. Сидел над этим много часов и не откопал в интернете никак примеров по этому поводу. Единственное  нашёл библиотеку boost.task, в которой уже реализован по идее планировщик задач, но примеров по нему тоже не особо.(

Добавлено через 6 минут и 39 секунд
Цитата(NoviceF @ 8.1.2013,  12:29)
Цитата(Toyamatokanava @  8.1.2013,  00:51 Найти цитируемый пост)
Можно ли с помощью языка с++ создать приложение, которое будет запускаться в определенное время и  дату ? 


Можно сделать приложение, которое ты запускаешь, оно тихо висит в процессах, ничего не делает, а потом, в определённые дату и время, делает какое-либо действиет.

NoviceF, пойду по вашему пути.)  И вот мои наработки.) 

Код

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <Windows.h>
#include <ctime>
using namespace std;
int main()
{
    // Скрывает в фоновый режим
//---------------------------
    char chBuf[MAX_PATH];
GetConsoleTitle(chBuf, MAX_PATH);
OemToChar(chBuf,chBuf);
 
HWND hWnd = FindWindow(NULL, chBuf);
if(hWnd)
{
         ShowWindow(hWnd,SW_HIDE);
}

//-----------------------------

    // Разворачивает окно
//---------------------------
ShowWindow(hWnd,SW_SHOW);

    cout<<"Hello World"<<endl;
    system("pause");
//-----------------------------
    
   
 system("pause");

  return 0;
}


Как сделать так, чтобы  консольное окно разворачивалось в определённое время и дату? Понятно, что нужно написать  условие if(...) , но какие операторы времени и даты использовать, я ни куку).

P.S. Помогите пожалуйста своему земляку), так как я тоже из Ростова.)
PM MAIL   Вверх
feodorv
Дата 8.1.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Помогут Waitable Timer Objects smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Toyamatokanava
Дата 8.1.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(feodorv @ 8.1.2013,  15:01)
Помогут Waitable Timer Objects smile

Думаю Waitable Timer Objects не помогут.))  Я хотел бы сделать так, загнать консольное приложение в реестр автозагрузки, потом сделать , чтобы оно находилось в процессах до наступления какой-то даты в будущем. Единственное вот не знаю как описать ситуацию наступления этой даты.) Ладно, буду пытаться.))
PM MAIL   Вверх
Toyamatokanava
Дата 8.1.2013, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Может кому-нибудь пригодиться. Вот что у меня получилось.)

Код

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <Windows.h>
#include <ctime>
#include <time.h>

using namespace std;
int main()
{
    time_t now;
struct tm *current;
now = time(0);
current = localtime(&now);

    
    // Скрывает в фоновый режим
//---------------------------
    char chBuf[MAX_PATH];
GetConsoleTitle(chBuf, MAX_PATH);
OemToChar(chBuf,chBuf);
 
HWND hWnd = FindWindow(NULL, chBuf);
if(hWnd)
{
         ShowWindow(hWnd,SW_HIDE);
}

//-----------------------------

    // Разворачивает окно
//---------------------------

while(current->tm_min!=53)
{
    now = time(0);
current = localtime(&now);
}

ShowWindow(hWnd,SW_SHOW);

    cout<<"Hello World"<<endl;
    system("pause");
//-----------------------------
      
  

  return 0;
}
/*
int tm_sec;    //секунды, 0-61
    int tm_min;    //минуты, 0-59
    int tm_hour;    //часы, 0-23
    int tm_mday;    //день месяца, 1-31
    int tm_non;    //месяц, начиная с января, 0-11
    int tm_year;    //год после 1900
    int tm_wday;    //день, начиная с воскресенья, 0-6
    int tm_yday;    //день, начиная с 1-го января, 0-365
    int tm_isdst    //индикатор летнего времени
    */

PM MAIL   Вверх
NoviceF
Дата 8.1.2013, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Цитата(Toyamatokanava @  8.1.2013,  15:39 Найти цитируемый пост)
 Помогите пожалуйста своему земляку), так как я тоже из Ростова.) 


я бы с удовольствием, но с winapi не дружу smile

так на основе Boost.Date_Time можно было бы что-нибудь придумать.. Пока в голову приходит вариант сделать while и в нём sleep(), секунд 10 (или какая нужна точность), после выхода из слипа проверка не превышает ли текущее время системы заданное, если превышает - делать работу.

Ставить просто на while мне кажется слишком расточительным.
PM MAIL   Вверх
Toyamatokanava
Дата 8.1.2013, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(NoviceF @ 8.1.2013,  17:10)
Цитата(Toyamatokanava @  8.1.2013,  15:39 Найти цитируемый пост)
 Помогите пожалуйста своему земляку), так как я тоже из Ростова.) 


я бы с удовольствием, но с winapi не дружу smile

так на основе Boost.Date_Time можно было бы что-нибудь придумать.. Пока в голову приходит вариант сделать while и в нём sleep(), секунд 10 (или какая нужна точность), после выхода из слипа проверка не превышает ли текущее время системы заданное, если превышает - делать работу.

Ставить просто на while мне кажется слишком расточительным.

Поставленная задача была решена предложенным вами методом.) Только теперь появилась загвоздка с добавлением в реестр для автозагрузки данного процесса. Скажим так,  в windows xp  все прекрасно работало и ключ записывался в реестр, а в Windows 7  выделывается.
Код

HKEY hKey;
        TCHAR buffer[MAX_PATH];
        GetModuleFileName(NULL, buffer,MAX_PATH + 1);
 
        RegCreateKeyEx(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,0,KEY_ALL_ACCESS,NULL,&hKey,NULL);
        RegSetValueEx(hKey,L"MY",0,REG_SZ,(PBYTE)buffer,2*wcslen(buffer)+1);
        RegCloseKey(hKey);



PM MAIL   Вверх
bsa
Дата 8.1.2013, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Toyamatokanava @  8.1.2013,  15:39 Найти цитируемый пост)
Спасибо огромное, с помощью планировщика можно сделать то, что я думал, но пожалуй я пока не в силах из-за недостатка знаний в WinApi.

Причем тут WinAPI? Тебе нужно лишь открыть "Назначенные задания", создать новое задание, задать расписание и выбрать программу для запуска. Все это делается мышкой и клавиатурой.
PM   Вверх
Toyamatokanava
Дата 8.1.2013, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Вот делайте вручную.;) 
PM MAIL   Вверх
bsa
Дата 8.1.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Вот страница по первой версии шедулера: http://msdn.microsoft.com/en-us/library/aa...1(v=vs.85).aspx
там есть ссылка на пример.
PM   Вверх
Toyamatokanava
Дата 8.1.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



А что неправильно в коде, который отвечает за добавление в реестр подскажите пожалуйста, если не сложно. 
PM MAIL   Вверх
bsa
Дата 8.1.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Toyamatokanava @  8.1.2013,  19:20 Найти цитируемый пост)
А что неправильно в коде, который отвечает за добавление в реестр подскажите пожалуйста, если не сложно.  

Отсутствие у твоего кода прав на добавление в эту ветку.
Используй HKEY_CURRENT_USER вместо HKEY_LOCAL_MACHINE.
PM   Вверх
Toyamatokanava
Дата 8.1.2013, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(bsa @ 8.1.2013,  18:22)
Цитата(Toyamatokanava @  8.1.2013,  19:20 Найти цитируемый пост)
А что неправильно в коде, который отвечает за добавление в реестр подскажите пожалуйста, если не сложно.  

Отсутствие у твоего кода прав на добавление в эту ветку.
Используй HKEY_CURRENT_USER вместо HKEY_LOCAL_MACHINE.

Виндовс 7 и правда не даёт права, но все же и ваш вариант не работает. 


Ошибки:
Код

1>Вывод текста со звуком.cpp(22): error C2664: RegCreateKeyExA: невозможно преобразовать параметр 2 из "const wchar_t [46]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>Вывод текста со звуком.cpp(23): error C2664: wcslen: невозможно преобразовать параметр 1 из "TCHAR [260]" в "const wchar_t *"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>Вывод текста со звуком.cpp(23): error C2664: RegSetValueExA: невозможно преобразовать параметр 2 из "const wchar_t [3]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.