Russian Qt Forum

Qt => Общие вопросы => Тема начата: Jeka от Август 23, 2013, 16:32



Название: Системное время.
Отправлено: Jeka от Август 23, 2013, 16:32
Добрый день! Необходимо иметь возможность изменения системного времени Windows 7. Делаю это следующим образом:
В из основной программы запускаю другую маленькую программульку состоящую из окошка и кнопки, по кнопке выполняется функция:
Код:
void MainWindow::set_time()
{
    SYSTEMTIME * my_time = new SYSTEMTIME;
    my_time->wDay = 19;
    my_time->wMonth = 8;
    my_time->wYear = 2013;
    my_time->wHour = 18;
    my_time->wMinute = 30;
    my_time->wSecond = 0;
    if (SetSystemTime(my_time))
    {
        MessageBoxA(NULL,"Set OK","Time", MB_OK);
    }
    else
    {
        MessageBoxA(NULL,"Set FALSE","Time", MB_OK);
    }
    delete my_time;
}

Все работает, все ок, но хочу что то простое без гуя и кнопки в один файл - вроде этого:

Код:

#include <windows.h>
using namespace std;

int main(int argc, char *argv[])
{       
    SYSTEMTIME * my_time = new SYSTEMTIME;
    my_time->wDay = 19;
    my_time->wMonth = 8;
    my_time->wYear = 2013;
    my_time->wHour = 18;
    my_time->wMinute = 30;
    my_time->wSecond = 0;
    if (SetSystemTime(my_time))
    {
        MessageBoxA(NULL,"Set OK","Time", MB_OK);
    }
    else
    {
         // Выводим окошко с ошибкой
        void *cstr;
        FormatMessageW(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                    NULL,
                    GetLastError(),
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                    (LPTSTR) &cstr,
                    0,
                    NULL
                    );
        MessageBoxW(NULL,(wchar_t*)cstr,L"Time", MB_OK);
        LocalFree(cstr);

        // Просто месседж бокс
        MessageBoxA(NULL,"Set FALSE","Time", MB_OK);
    }
    delete my_time;

    return 0;
}

но эта программа не работает и ничего не изменяет, выдает ошибку "Параметр задан неверно", подскажите почему?





Название: Re: Системное время.
Отправлено: neversleep от Август 23, 2013, 16:43
Там еще есть поле wMilliseconds.


Название: Re: Системное время.
Отправлено: Jeka от Август 23, 2013, 16:52
Там еще есть поле wMilliseconds.

Помогло!!! Спасибо!


Название: Re: Системное время.
Отправлено: Vladimir от Август 25, 2013, 00:30
а под linux случайне не в курсе как решить эту задачу не из-под root пользователя?)


Название: Re: Системное время.
Отправлено: Fat-Zer от Август 25, 2013, 01:43
а под linux случайне не в курсе как решить эту задачу не из-под root пользователя?)
также как и в винде — ни как... нужно авторизоваться...
можно ещё написать setuid'ный хелпер или демон, запускаемый от root'а, но это уже костыли и потенциальная дыра...