Russian Qt Forum
Ноябрь 02, 2024, 15:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в windows програмно изменить часовый пояс?  (Прочитано 6477 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Январь 06, 2016, 16:43 »

Здравствуйте, господа форумчане. Немного уже разобрался с классом QTimeZone. Удалось получить список часовых поясов, подобный тому что в Windows-е, теперь хочу, чтобы в моей проге пользователь мог выбирать из него нужный ему часовой пояс и устанавливать его в систему. Может кто знает как средствами qt изменить часовой пояс в Windows 7(Xp)? Парюсь над этим вопросом уже дня 2, если не больше, пока ничего так и не нашел, разве что средствами WIN API.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Январь 06, 2016, 16:48 »

Средствами Qt никак
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #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 Offline

Сообщений: 306


Просмотр профиля
« Ответ #3 : Январь 09, 2016, 23:39 »

спасибо за ответ)
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #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 Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #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 Offline

Сообщений: 306


Просмотр профиля
« Ответ #6 : Январь 11, 2016, 22:41 »

из реестра можно читать даже через QSettings. если хочешь через винапи, то это элементарно гуглится: http://stackoverflow.com/questions/34065/how-to-read-a-value-from-the-windows-registry
Как раз вот сегодня и удалось получить список из реестра с помощью QSettings. Буду теперь дальше разбираться.
« Последнее редактирование: Январь 11, 2016, 22:47 от billy4685 » Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #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 Offline

Сообщений: 306


Просмотр профиля
« Ответ #8 : Январь 13, 2016, 14:20 »

TimeZoneKeyName все же удалось заполнить, явно используя QSettings через метод setValue("TimeZoneKeyName", str); задал. Но вот в самом Windows 7 название часового пояса так и не появилось(( (на рисунке 1 - вместо него у меня высвечивается что-то типа "Не удается определить текущий часовой пояс... "). Хотя в списке часовой пояс задался (рисунок 2). Как в это поле вписать имя выбранного часового пояса? может кто знает?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.