IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> SetSystemTime, Функции Win32 API в VS C++
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Требуется установить системное время с использованием функции:

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...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
меня смущают получаемые результаты: например реальное время 18:...
результаты работы: до - 14, после 12...
GetSystemTime возвращает время UTC, так что совсем не проблема, что это не будет совпадать с твоим, локальным временем. А вот то, что после SetSystemTime у тебя не возвращается то же время, которое установлено только что - это уже хуже... И после SetSystemTime и после GetSysTime получи коды ошибки (GetLastError), и убедись что ошибок не было (я надеюсь, привилегия SE_SYSTEMTIME_NAME доступна под твоей учетной записью?)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 13.09.2008 19:56) *

И после 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....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
В каждом из случаев вызова GetLastError() - код ошибки 2....
blink.gif При чем здесь ошибка №2? Это ж "ERROR_FILE_NOT_FOUND: The system cannot find the file specified." Какой именно файл не найден, спрашивается? Кстати, в первом случае у тебя GetLastError() вызывается для операции printf, а не для GetSystemTime. Нужно вызывать получение кода ошибки сразу после проверяемой операции.

Пока думается только о том, что у тебя вызывается не глобальная 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. Что с привилегиями?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 13.09.2008 23:07) *

Пока думается только о том, что у тебя вызывается не глобальная Get/SetSystemTime, а одноименная функция из какого-нибудь namespace... Попробуй:


результаты первого(новый параметр 14) и второго запуска (19) запуска на картиночке...

и получается, что 2-й раз изменения не происходят...

ээ...а насчёт привилегий я не знаю...как можно проверить??


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
а насчёт привилегий я не знаю...как можно проверить??


"Пуск" -> "Выполнить" -> cmd -> whoami /PRIV

(проверял под Windows XP SP3, в SP2 этого может еще не быть). А вообще, если ты работаешь под админским аккаунтом, то привилегии все у тебя есть, если под ограниченным пользовательским - тогда имеет смысл проверить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 14.09.2008 20:40) *

если ты работаешь под админским аккаунтом

именно под ним..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


То же самое задание попыталась реализовать в С++ 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
}
}

 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 0:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name