![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Требуется установить системное время с использованием функции:
BOOL SetSystemTime(
const SYSTEMTIME* lpSystemTime
);
Вот что у меня получилось:
#include "stdafx.h"
#include "windows.h"
#include <stdio.h>
#include <conio.h>
#include <winbase.h>
#include <windef.h>
//....
SYSTEMTIME New_ST;
GetSystemTime(&New_ST);
printf("%02d \n", New_ST.wHour); //посмотрим, каким было системное время
New_ST.wHour = 10; //изменим часы
SetSystemTime(&New_ST);
GetSystemTime(&New_ST); //посмотрим результат
printf("%02d", New_ST.wHour);
getch();
//....
Скажи пожалуйста, правильно ли я использую функцию? меня смущают получаемые результаты: например реальное время 18:... результаты работы: до - 14, после 12... |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата меня смущают получаемые результаты: например реальное время 18:... GetSystemTime возвращает время UTC, так что совсем не проблема, что это не будет совпадать с твоим, локальным временем. А вот то, что после SetSystemTime у тебя не возвращается то же время, которое установлено только что - это уже хуже... И после SetSystemTime и после GetSysTime получи коды ошибки (GetLastError), и убедись что ошибок не было (я надеюсь, привилегия SE_SYSTEMTIME_NAME доступна под твоей учетной записью?)...результаты работы: до - 14, после 12... |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
И после SetSystemTime и после GetSysTime получи коды ошибки (GetLastError), и убедись что ошибок не было...
SYSTEMTIME New_ST;
GetSystemTime(&New_ST);
printf("%02d \n", New_ST.wHour); //посмотрим, каким было системное время
printf("(%d)\n", GetLastError());
New_ST.wHour = 10; //изменим часы
SetSystemTime(&New_ST);
printf("(%d)\n", GetLastError());
GetSystemTime(&New_ST); //посмотрим результат
printf("%02d", New_ST.wHour);
printf("(%d)\n", GetLastError());
В каждом из случаев вызова GetLastError() - код ошибки 2.... |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата В каждом из случаев вызова GetLastError() - код ошибки 2.... ![]() Пока думается только о том, что у тебя вызывается не глобальная Get/SetSystemTime, а одноименная функция из какого-нибудь namespace... Попробуй: SYSTEMTIME New_ST;
::GetSystemTime(&New_ST);
DWORD dwErr = GetLastError();
printf("%02d\nGetSystemTime LastError() = %d", New_ST.wHour, dwErr);
New_ST.wHour = 14; //изменим часы
::SetSystemTime(&New_ST);
dwErr = GetLastError();
printf("SetSystemTime LastError() = %d\n", dwErr);
::GetSystemTime(&New_ST); //посмотрим результат
dwErr = GetLastError();
printf("%02d\nGetSystemTime LastError() = %d\n", New_ST.wHour, dwErr);
P.S. Что с привилегиями? |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Пока думается только о том, что у тебя вызывается не глобальная Get/SetSystemTime, а одноименная функция из какого-нибудь namespace... Попробуй: результаты первого(новый параметр 14) и второго запуска (19) запуска на картиночке... и получается, что 2-й раз изменения не происходят... ээ...а насчёт привилегий я не знаю...как можно проверить?? Эскизы прикрепленных изображений ![]() ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата а насчёт привилегий я не знаю...как можно проверить?? "Пуск" -> "Выполнить" -> cmd -> whoami /PRIV (проверял под Windows XP SP3, в SP2 этого может еще не быть). А вообще, если ты работаешь под админским аккаунтом, то привилегии все у тебя есть, если под ограниченным пользовательским - тогда имеет смысл проверить... |
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
18192123 |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
То же самое задание попыталась реализовать в С++ Builder6
В Edit1 вводится системное время, которое нужно установить...
SYSTEMTIME New_ST;
char msgbuf[4096];
New_ST.wHour = StrToInt(Edit1->Text); //изменим часы
::SetSystemTime(&New_ST);
//контроль ошибок
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf, sizeof(msgbuf), NULL );
Edit2->Text=msgbuf; // выдаёт ошибку "Параметр задан неверно" и соответственно никаких изменений времени не //происходит
В чём может быть причина?? Сообщение отредактировано: 18192123 - 19.09.2008 17:55 |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата В чём может быть причина?? В том, что остальные поля (кроме wHour) содержат некорректные значения (ты ж их не инициализируешь никак). Если тебе надо изменить показания часов, надо сначала из прочитать, правда?void __fastcall TForm1::Button14Click(TObject *Sender)
{
SYSTEMTIME New_ST;
char msgbuf[4096];
::GetSystemTime(&New_ST); // заполним все поля значениями
New_ST.wHour = StrToInt(Edit1->Text); // изменим часы
if(::SetSystemTime(&New_ST) == 0) {
//контроль ошибок
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),msgbuf, sizeof(msgbuf), NULL );
Edit2->Text=msgbuf;
}
}
|
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 7:10 |