Russian Qt Forum
Ноябрь 02, 2024, 13:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Как в windows програмно изменить часовый пояс?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как в windows програмно изменить часовый пояс? (Прочитано 6475 раз)
billy4685
Крякер
Offline
Сообщений: 306
Как в windows програмно изменить часовый пояс?
«
:
Январь 06, 2016, 16:43 »
Здравствуйте, господа форумчане. Немного уже разобрался с классом QTimeZone. Удалось получить список часовых поясов, подобный тому что в Windows-е, теперь хочу, чтобы в моей проге пользователь мог выбирать из него нужный ему часовой пояс и устанавливать его в систему. Может кто знает как средствами qt изменить часовой пояс в Windows 7(Xp)? Парюсь над этим вопросом уже дня 2, если не больше, пока ничего так и не нашел, разве что средствами WIN API.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #1 :
Январь 06, 2016, 16:48 »
Средствами Qt никак
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #2 :
Январь 07, 2016, 16:48 »
ну это ж сугубо задача ОС, естественно только winapi
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
billy4685
Крякер
Offline
Сообщений: 306
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #3 :
Январь 09, 2016, 23:39 »
спасибо за ответ)
Записан
billy4685
Крякер
Offline
Сообщений: 306
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #4 :
Январь 11, 2016, 12:51 »
Да уж и в WIN API не нахожу толкового примера((. Вот нашел как можно изменить в системе часовой пояс:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724944%28v=vs.85%29.aspx
. Но там в примере к функции SetTimeZoneInformation, они меняют часовой пояс, создав новую структуру типа TIME_ZONE_INFORMATION и установив соответствующие значения для ее полей.
Так же нашел, что в реестре существует список часовых поясов по пути: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones и в каждом часовом поясе есть значение Display - которое как раз и хранит его название. Но вот только не знаю как туда пробраться средствами С++ (для Delphi к примеру нашел вот люди обсуждают:
http://www.sql.ru/forum/1139160/kak-vyvesti-spisok-chasovyh-poyasov-iz-sistemy
).
Может кто знает как считать этот список часовых поясов с реестра? И как потом установить один из этих часовых поясов для системы?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #5 :
Январь 11, 2016, 19:09 »
из реестра можно читать даже через QSettings. если хочешь через винапи, то это элементарно гуглится:
http://stackoverflow.com/questions/34065/how-to-read-a-value-from-the-windows-registry
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
billy4685
Крякер
Offline
Сообщений: 306
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #6 :
Январь 11, 2016, 22:41 »
Цитата: kambala от Январь 11, 2016, 19:09
из реестра можно читать даже через QSettings. если хочешь через винапи, то это элементарно гуглится:
http://stackoverflow.com/questions/34065/how-to-read-a-value-from-the-windows-registry
Как раз вот сегодня и удалось получить список из реестра с помощью QSettings. Буду теперь дальше разбираться.
«
Последнее редактирование: Январь 11, 2016, 22:47 от billy4685
»
Записан
billy4685
Крякер
Offline
Сообщений: 306
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #7 :
Январь 13, 2016, 11:04 »
Используя QSettings, и метод SetTimeZoneInformation все же у меня получилось считать часовые пояса, вывести их в QTreeWidget, и потом по выбору из этого списка устанавливать выбранный часовой пояс системе windows.
Пользовался следующими примерами:
https://social.microsoft.com/Forums/en-US/e96b0548-f1b2-45b3-8b33-a40fb00a5cf8/settimezoneinfo-unable-to-read-the-timezone-name-for-the-next-time?forum=Offtopic
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724944%28v=vs.85%29.aspx
Вот только не могу понять как установить имя часового пояса в систему (походу в реестре в ветке: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation - это TimeZoneKeyName). В структуре TIME_ZONE_INFORMATION поля TimeZoneKeyName нет. Решил пользоваться структурой DYNAMIC_TIME_ZONE_INFORMATION там как раз поле TimeZoneKeyName есть в наличии. Но вот почему-то в QtCreator -е на метод SetDynamicTimeZoneInformation - бъет ошибку - 'SetDynamicTimeZoneInformation' was not declared in this scope if(SetDynamicTimeZoneInformation(&tz)) . Хотя саму структуру DYNAMIC_TIME_ZONE_INFORMATION видит, а вот метод SetDynamicTimeZoneInformation почему-то нет.
В чем может быть проблема? Может нужно какую-то библиотеку прописать?
Записан
billy4685
Крякер
Offline
Сообщений: 306
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #8 :
Январь 13, 2016, 14:20 »
TimeZoneKeyName все же удалось заполнить, явно используя QSettings через метод setValue("TimeZoneKeyName", str); задал. Но вот в самом Windows 7 название часового пояса так и не появилось(( (на рисунке 1 - вместо него у меня высвечивается что-то типа "Не удается определить текущий часовой пояс... "). Хотя в списке часовой пояс задался (рисунок 2). Как в это поле вписать имя выбранного часового пояса? может кто знает?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как в windows програмно изменить часовый пояс?
«
Ответ #9 :
Январь 14, 2016, 19:35 »
посмотри в мсдн в какой библиотеке находится SetDynamicTimeZoneInformation() и какой заголовочный файл надо подключать. библиотеку пропишешь через LIBS += -l<имя библиотеки>
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...