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

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

17.02.2012, 18:14. Показов 10455. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru