Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161

Как программно узнать дату на своём компе?

17.02.2012, 18:14. Показов 10913. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
начал работу над регистрацией для своей проги. Требуется помощь: подскажите как мне считывать сегодняшнюю дату с моего компьютера.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2012, 18:14
Ответы с готовыми решениями:

Как узнать список текущих процессов запущеных на компе
Как узнать список текущих процессов запущеных на компе?

Как запустить сервак на своём компе?
Привет всем! Недавно я начил увлекатся программированием веб-сайтов. Сайт почти создан, но какой смысл мне его доводить до конца, если я...

С помощью какого кода можно запустить как либо файл по локальной сети, и так-же на своём компе
Всем доброго времени суток. У меня несколько вопросов. 1. С помощью какого кода можно запустить как либо файл по локальной сети, и...

66
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 14:20  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от LK Посмотреть сообщение
Клод, а скомпилировать и посмотреть самому западло ? И указать не три дня дня ожидания у моря погоды, а 5 минут - воспитание не позволяет ?
да не не западло
просто для времени другая функция
я её не знаю)
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.02.2012, 14:24
Чтоб не ждать три дня, ты зделай пока один день и вечерком все будет видно...
оп...не успел...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 14:28
Цитата Сообщение от Клод Посмотреть сообщение
да не не западло
просто для времени другая функция
я её не знаю)
чтобы узнать, далеко ходить не надо - достаточно просто почитать вашу же эту самую тему:
Цитата Сообщение от QVO Посмотреть сообщение
Time() - текущее время на компьютере. (дата по умолчанию 1899 года)
Date() - текущая дата на компьютере. (время по умолчанию 0 часов)
Now() - текущая дата и время на пк.
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 14:38  [ТС]
Короче чтобы не ждать в реестре поменял цифру18 на 19, а потом на 20
перезапускал прогу и изменений не происходило((

Добавлено через 8 минут
Я так думаю, что проблема в том, что ключ реестра не проверяется.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 14:55
а при чем здесь цифра в реесте, если вы в проге задаете текущую дату + 3 дня , а 18,19,20 в данном случае будет меньше, чем 18+3 ? если я все правильно понял, не читая , как и вы, вашу тему
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 14:58  [ТС]
я потом и побольше цифры ставил)))

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
if(reg -> KeyExists("DataReg") == true)
 {
   
   reg->RootKey = HKEY_CURRENT_USER;
   reg->OpenKey("Software",true);
   reg->OpenKeyReadOnly("DataReg");
 
   if (today == date + 1)
{
Вот эта часть кода у меня вызывает подозрение

ещё кое что проверил: поставил число 25е, запустил прогу, она поставила 18 число.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 15:18
вот и я о том же
Может, где и повторюсь (тему-то вашу я не читал ), но алгоритмъ такой:
1. При самом первом запуске проги записываем дату запуска в реестр.
2. При последующих запусках:
2.1. Если дата в реестре уже записана, ничего не делаем, ничего не пишем.
2.2. Сверяем дату из реестра с текущей датой и делаем необходимые телодвижения.
Я этого в коде не рассмотрел.
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 15:24  [ТС]
Цитата Сообщение от Клод Посмотреть сообщение
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
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TDateTime date, today;
  date = date.CurrentDate();
  today = Date();
  TRegistry *reg = new TRegistry(); 
  reg->RootKey = HKEY_CURRENT_USER; 
  reg->OpenKey("Software",true); 
  if(reg -> ValueExists("DataReg") == 1) {
    reg->RootKey = HKEY_CURRENT_USER; 
    reg->OpenKey("Software",true);
    reg->OpenKeyReadOnly("DataReg");
    if (today == date + 3) {
      Form2->ShowModal();
      if (Form2->ShowModal()==mrOk) {
        ShowMessage("Пароль введён верно");
        reg->RootKey=HKEY_CURRENT_USER;
        reg->OpenKey("Software",false);
        reg->DeleteValue("DataReg");
        reg->CloseKey(); * 
        delete reg; * * * 
      }
      if(Form2->ShowModal()==mrCancel)
        Close();
    }
  }
  else {
    reg -> WriteString("DataReg",date.DateString()); 
  }
  reg->CloseKey();
  delete reg;
}
вот код, отвечающий за то, что ты писал.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 15:38
а для чего вы удаляете значение из реестра
C++
1
     reg->DeleteValue("DataReg");
? как я понимаю, в данном случае, при последующем запуске в реестр будет записано уже новое значение и проверка осуществляться не будет.
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 15:42  [ТС]
если пароль на 2й форме будет введён верно, то значение из реестра удалится
хотя я придумал решение получше на этот счёт.
Но у меня проблема в том, что программа не проверяет значение ключа, и создаёт своё значение. А надо чтоб проверял
вот моя проверка:
C++
1
if(reg -> KeyExists("DataReg") == 1)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 15:51
а вы не пробовали посмотреть/проверить, что у вас возвращает
C++
1
date + 3
?
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 15:54  [ТС]
нет, зато попробовал и узнал, что
C++
1
if(KeyExsists("DataReg") == true)
не возвращает ничего(
а до date +3 ещё надо добраться
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 16:10
В младенческом возрасте что-то похожее я делал, и оно даже работало , может, натолкнет на мысль :
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
void __fastcall TFormMain::LogRun(void)
{
// Запись в реестр значения, при значении которого 1
// действие должно выполняться только один раз - 
// при первом запуске программы
  TRegistry * regLR;
  regLR = new TRegistry; // Создаем новый ключ
  int D1;
  int D2;
  int D3;
  regLR->RootKey = HKEY_CURRENT_USER; // Главная ветка
  AnsiString KeyLogRun = "\\Software\\CoolProg\\Setting\\Common"; // Ветка программі
  regLR->OpenKey(KeyLogRun, true);
  if (regLR->ValueExists("10001") == 1) {
    int D1 = regLR->ReadInteger ("10001");
    regLR->WriteInteger ("10001", D1+1);
    int D2 = regLR->ReadInteger ("10001");
    Application->MessageBox("Количество запусков "
                            + IntToStr(D2)).c_str(),
                            "CoolProg",
                            MB_OK+MB_ICONINFORMATION);
  }
  else {
    regLR->WriteInteger ("10001", 1);
    int D3 = regLR->ReadInteger ("10001");
    Application->MessageBox(("Зарегистрировано.\n"
                            + "Параметр лицензии."
                            + IntToStr(D3)).c_str(),
                            "CoolProg",
                            MB_OK + MB_ICONINFORMATION);
  }
  delete regLR;
}
а ваша дата - то же число, только double, а вот какой у вас получился тип date ? и что с чем вы суммировали в этом:
C++
1
date + 3
- посмотреть бы.
1
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 16:16  [ТС]
Короче я запутался.
Давайте вначале разберёмся с проверкой а потом с date?
У меня прога не хочет проверять ключ. Как решить это траблу?
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
TDateTime date, today;
date = date.CurrentDate();
today = Date();
TRegistry *reg = new TRegistry(); //Создали обьект класса TRegistry
reg->RootKey = HKEY_CURRENT_USER; //Теперь мы будем работать с разделом HKEY_LOCAL_MACHINE (все записи ключей, удаление, перемещение будут происходить в этом разделе)
reg->OpenKey("Software",true); //Мы создали ключ, если же такой ключ уже существовал, то он был бы открыт для записи
if(reg->KeyExists("DataReg") == 1)
 {
   ShowMessage("Урааааа!");
   // Читаем и проверяем
   reg->RootKey = HKEY_CURRENT_USER; //Теперь мы будем работать с разделом HKEY_LOCAL_MACHINE (все записи ключей, удаление, перемещение будут происходить в этом разделе)
   reg->OpenKey("Software",true);
   reg->OpenKeyReadOnly("DataReg");
 
   if (today == date + 1)
{
    Form2->ShowModal();
    //открыли окно регистрации
    if(Form2->ShowModal()==mrOk)
    {
    ShowMessage("Пароль введён верно! Запишите его куда нибудь. Его надо вводить через каждые 3 дня!");
    reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
    reg->OpenKey("Software",false);   //Октрываем ключ, над которым будем работать
    reg->DeleteValue("DataReg");     //Удаляем параметр
    reg->CloseKey();   //Закрываем ключ
    delete reg;       //Освобождаем память
    }
    if(Form2->ShowModal()==mrCancel)
    Close();
    }
}
 else
  {
     ShowMessage("Проверка не выполнена");
      reg -> WriteString("DataReg",date.DateString()); // Создаем метку
  }
reg->CloseKey();   //Закрываем ключ
delete reg;       //Освобождаем память
//Можно открыть реестр и полюбоваться на проделанную работу.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 16:19
дык, я вам и показал свой код, в котором все как бы проверялось
а сакральное предназначение вашей толпы if-ов я так и не понял
0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 16:26  [ТС]
Странно но получилось))
Заменил KeyExists на ValueExists.
Спс
Сейчас посмотрим что выдаст прога...
Таак вы были правы.
C++
1
today = date +1
; - неправильно и что делать?(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 16:29
что - неправильно ?

Не по теме:

не в этой ли теме я уже сегодня упоминал о выключенном за неуплату угадываетеле мыслей на расстоянии :) ?

0
3 / 3 / 2
Регистрация: 13.02.2012
Сообщений: 161
18.02.2012, 16:32  [ТС]
Да либо реестр не открывает и не считывает значение DateReg, либо
C++
1
today = date +1
не работает, потому что окно с регой не вылетает
Лан, мне пора на тренировку, вечером буду продолжать))
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 16:37
и все же,
C++
1
today == date +1
, если в условии, а
C++
1
today = date +1
- это присваивание
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.02.2012, 17:38
Пример определения в событии Form1/OnShow:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if (Label1->Caption=="777") { // Label1 здесь играет роль переменной
    Label1->Caption=DateToStr(Now()+30); // здесь можете поставить +3 (з дня)
     
    AnsiString str3;
    str3 = Label1->Caption;
    // Сохраняем Дату истечения лицензии в реестре
    TRegistry *reg3 = new TRegistry();
    reg3->RootKey=HKEY_CURRENT_USER;
    reg3->OpenKey("Software\\Soft\\Klod",true);
    reg3->WriteString("Caption",str4);
    reg3->CloseKey();
    reg3 = NULL;
    delete reg3;
А теперь сравним:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TDate date1, date2; // переменные для вычисления остатка дней лицензии
    // Проверяем и вводим ограничения если лицензия закончилась
    TDate A = DateToStr(Now()); // текущая дата
    TDate B = StrToDate(Label1->Caption);
    signed char Result = CompareDate(A, B);
    switch (Result) {
 
  case -1:    
 
    break;
 
  case 0:
 
    break;
 
  case 1:
 
           break;}
или так:
C++
1
2
3
4
5
date1 = DateToStr(Now());
date2 = StrToDate(Label1->Caption);
Label2->Caption = (FloatToStr(DaysBetween(date1, date2)));
// и наконец проверяем сколько дней прошло
if (Label2->Caption == (3)){ShowMessage("Гитлер капут");}
Если это не поможет тогда дело труба...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2012, 17:38

Как программно заархивировать определенную папку на компе?
Добрый день. Собственно, вопрос в теме. Есть база, результатом работы которой являются изменения в определенных файлах и папках,...

Как отключить монитор программно на реальном компе с возможностью удаленного доступа?
Здравствуйте дорогие форумчане. Мне очень нужно отключить монитор программно на реальном компе с возможностью удаленного доступа к этой же...

Как узнать какая версия Access стоит на компе?
Как узнать какая версия Access стоит на компе?

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

Как узнать номер версии Internet Explorer, установленного на компе ?
Если на компьютере установлен IE версии ниже 5, то у программы проблемы. Как проверить номер версии ? Игорь


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru