diff --git a/base/services/CMakeLists.txt b/base/services/CMakeLists.txt index e49a340199..6b1dd31f77 100644 --- a/base/services/CMakeLists.txt +++ b/base/services/CMakeLists.txt @@ -12,6 +12,7 @@ add_subdirectory(tcpsvcs) add_subdirectory(telnetd) #add_subdirectory(tftpd) add_subdirectory(umpnpmgr) +add_subdirectory(w32time) add_subdirectory(wkssvc) add_subdirectory(wlansvc) add_subdirectory(wmisvc) diff --git a/base/services/w32time/CMakeLists.txt b/base/services/w32time/CMakeLists.txt new file mode 100644 index 0000000000..5b0545e3f0 --- /dev/null +++ b/base/services/w32time/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(W32Time W32Time.c ntpclient.c) +set_module_type(W32Time win32cui UNICODE) +add_importlibs(W32Time advapi32 msvcrt kernel32 ntdll ws2_32) +add_cd_file(TARGET W32Time DESTINATION reactos/system32 FOR all) diff --git a/base/services/w32time/W32Time.c b/base/services/w32time/W32Time.c new file mode 100644 index 0000000000..2c541e154b --- /dev/null +++ b/base/services/w32time/W32Time.c @@ -0,0 +1,370 @@ +/* + * PROJECT: ReactOS W32Time Service + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: Create W32Time Service that reqularly syncs clock to Internet Time + * COPYRIGHT: Copyright 2018 Doug Lyons + */ + +#include +#include + +#include "timedate.h" + +SERVICE_STATUS ServiceStatus; +SERVICE_STATUS_HANDLE hStatus; +static WCHAR ServiceName[] = L"W32Time"; + +static VOID CALLBACK ServiceMain(int argc, char** argv); +void ControlHandler(DWORD request); +int InitService(); +ULONG GetServerTime(LPWSTR lpAddress); + +/* Copied from internettime.c */ +static VOID +UpdateSystemTime(ULONG ulTime) +{ + FILETIME ftNew; + LARGE_INTEGER li; + SYSTEMTIME stNew; + + /* Time at 1st Jan 1900 */ + stNew.wYear = 1900; + stNew.wMonth = 1; + stNew.wDay = 1; + stNew.wHour = 0; + stNew.wMinute = 0; + stNew.wSecond = 0; + stNew.wMilliseconds = 0; + + /* Convert to a file time */ + if (!SystemTimeToFileTime(&stNew, &ftNew)) + { + return; + } + + /* Add on the time passed since 1st Jan 1900 */ + li = *(LARGE_INTEGER *)&ftNew; + li.QuadPart += (LONGLONG)10000000 * ulTime; + ftNew = * (FILETIME *)&li; + + /* Convert back to a system time */ + if (!FileTimeToSystemTime(&ftNew, &stNew)) + { + return; + } + + /* Use SystemSetTime with SystemTime = TRUE to set System Time */ + SystemSetTime(&stNew, TRUE); +} + +/* Copied from dateandtime.c */ +BOOL +SystemSetTime(LPSYSTEMTIME lpSystemTime, + BOOL SystemTime) +{ + HANDLE hToken; + DWORD PrevSize; + TOKEN_PRIVILEGES priv, previouspriv; + BOOL Ret = FALSE; + + /* + * Enable the SeSystemtimePrivilege privilege + */ + + if (OpenProcessToken(GetCurrentProcess(), + TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, + &hToken)) + { + priv.PrivilegeCount = 1; + priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + if (LookupPrivilegeValue(NULL, + SE_SYSTEMTIME_NAME, + &priv.Privileges[0].Luid)) + { + if (AdjustTokenPrivileges(hToken, + FALSE, + &priv, + sizeof(previouspriv), + &previouspriv, + &PrevSize) && + GetLastError() == ERROR_SUCCESS) + { + /* + * We successfully enabled it, we're permitted to change the time. + * Check the second parameter for SystemTime and if TRUE set System Time. + * Otherwise, if FALSE set the Local Time. + * Call SetLocalTime twice to ensure correct results. + */ + if (SystemTime) + { + Ret = SetSystemTime(lpSystemTime); + } + else + { + Ret = SetLocalTime(lpSystemTime) && + SetLocalTime(lpSystemTime); + } + + /* + * For the sake of security, restore the previous status again + */ + if (previouspriv.PrivilegeCount > 0) + { + AdjustTokenPrivileges(hToken, + FALSE, + &previouspriv, + 0, + NULL, + 0); + } + } + } + CloseHandle(hToken); + } + + return Ret; +} + +static DWORD +GetIntervalSetting() +{ + HKEY hKey; + DWORD dwData; + DWORD dwSize = sizeof(DWORD); + + dwData = 0; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\NtpClient", + 0, + KEY_QUERY_VALUE, + &hKey) == ERROR_SUCCESS) + { + RegQueryValueExW(hKey, + L"SpecialPollInterval", + NULL, + NULL, + (LPBYTE)&dwData, + &dwSize); + RegCloseKey(hKey); + } + return dwData; +} + +int set_time() +{ + ULONG ulTime; + LONG lRet; + HKEY hKey; + DWORD dwIndex = 0; + DWORD dwValSize; + DWORD dwNameSize; + WCHAR szValName[MAX_VALUE_NAME]; + WCHAR szData[256]; + WCHAR szDefault[256]; + + + lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Servers", + 0, + KEY_QUERY_VALUE, + &hKey); + if (lRet != ERROR_SUCCESS) + { + return 1; + } + + while (TRUE) + { + dwValSize = MAX_VALUE_NAME * sizeof(WCHAR); + szValName[0] = L'\0'; + lRet = RegEnumValueW(hKey, + dwIndex, + szValName, + &dwValSize, + NULL, + NULL, + (LPBYTE)szData, + &dwNameSize); + if (lRet == ERROR_SUCCESS) + { + /* Get data from default reg value */ + if (wcscmp(szValName, L"") == 0) // if (Index == 0) + { + wcscpy(szDefault, szData); + dwIndex++; + } + else + { + dwIndex++; + } + } + else if (lRet != ERROR_MORE_DATA) + { + break; + } + } + + + dwIndex = 0; + while (TRUE) + { + dwValSize = MAX_VALUE_NAME * sizeof(WCHAR); + szValName[0] = L'\0'; + lRet = RegEnumValueW(hKey, + dwIndex, + szValName, + &dwValSize, + NULL, + NULL, + (LPBYTE)szData, + &dwNameSize); + if (lRet == ERROR_SUCCESS) + { + /* Get date from selected reg value */ + if (wcscmp(szValName, szDefault) == 0) // if (Index == Default) + { + wcscpy(szDefault, szData); + dwIndex++; + } + else + { + dwIndex++; + } + } + else if (lRet != ERROR_MORE_DATA) + { + break; + } + } + + RegCloseKey(hKey); + + ulTime = GetServerTime(szDefault); + + if (ulTime != 0) + UpdateSystemTime(ulTime); + + return 0; +} + +static VOID CALLBACK +ServiceMain(int argc, char** argv) +{ + int error; + int result; + DWORD dwPollInterval; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + ServiceStatus.dwServiceType = SERVICE_WIN32; + ServiceStatus.dwCurrentState = SERVICE_START_PENDING; + ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwServiceSpecificExitCode = 0; + ServiceStatus.dwCheckPoint = 0; + ServiceStatus.dwWaitHint = 0; + + hStatus = RegisterServiceCtrlHandler(ServiceName, + (LPHANDLER_FUNCTION)ControlHandler); + if (hStatus == (SERVICE_STATUS_HANDLE)0) + { + // Registering Control Handler failed + return; + } + // Initialize Service + error = InitService(); + if (error) + { + // Initialization failed + ServiceStatus.dwCurrentState = SERVICE_STOPPED; + ServiceStatus.dwWin32ExitCode = -1; + SetServiceStatus(hStatus, &ServiceStatus); + return; + } + // We report the running status to SCM. + ServiceStatus.dwCurrentState = SERVICE_RUNNING; + SetServiceStatus (hStatus, &ServiceStatus); + + // The worker loop of a service + while (ServiceStatus.dwCurrentState == SERVICE_RUNNING) + { + dwPollInterval = GetIntervalSetting(); + result = set_time(); + if (result) + { + ServiceStatus.dwCurrentState = SERVICE_STOPPED; + ServiceStatus.dwWin32ExitCode = -1; + SetServiceStatus(hStatus, &ServiceStatus); + return; + } + Sleep(dwPollInterval); + } + return; +} + +int wmain(int argc, WCHAR *argv[]) +{ + + SERVICE_TABLE_ENTRYW ServiceTable[2] = + { + {ServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain}, + {NULL, NULL} + }; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + DPRINT("W32Time: main() started\n"); + + // Start the control dispatcher thread for our service + StartServiceCtrlDispatcher(ServiceTable); + + DPRINT("W32Time: main() done\n"); + + ExitThread(0); + + return 0; +} + +// Service initialization +int InitService() +{ + int result; + result = set_time(); + DPRINT1("W32Time Service started.\n"); + return(result); +} + +// Control handler function +void ControlHandler(DWORD request) +{ + switch(request) + { + case SERVICE_CONTROL_STOP: + DPRINT1("W32Time Service stopped.\n"); + + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwCurrentState = SERVICE_STOPPED; + SetServiceStatus (hStatus, &ServiceStatus); + return; + + case SERVICE_CONTROL_SHUTDOWN: + DPRINT1("W32Time Service stopped.\n"); + + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwCurrentState = SERVICE_STOPPED; + SetServiceStatus (hStatus, &ServiceStatus); + return; + + default: + break; + } + + // Report current status + SetServiceStatus (hStatus, &ServiceStatus); + + return; +} + diff --git a/base/services/w32time/ntpclient.c b/base/services/w32time/ntpclient.c new file mode 100644 index 0000000000..fc378c624e --- /dev/null +++ b/base/services/w32time/ntpclient.c @@ -0,0 +1,183 @@ +/* + * PROJECT: ReactOS Timedate Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/timedate/ntpclient.c + * PURPOSE: Queries the NTP server + * COPYRIGHT: Copyright 2006 Ged Murphy + * + */ + +#include "timedate.h" + +#include + +#define TIMEOUT 4000 /* 4 second timeout */ + +typedef struct _INFO +{ + SOCKET Sock; + SOCKADDR_IN myAddr; + SOCKADDR_IN ntpAddr; + NTPPACKET SendPacket; + NTPPACKET RecvPacket; +} INFO, *PINFO; + + +static BOOL +InitConnection(PINFO pInfo, + LPSTR lpAddress) +{ + WSADATA wsaData; + HOSTENT *he; + INT Ret; + + Ret = WSAStartup(MAKEWORD(2, 2), + &wsaData); + if (Ret != 0) + return FALSE; + + pInfo->Sock = socket(AF_INET, + SOCK_DGRAM, + 0); + if (pInfo->Sock == INVALID_SOCKET) + return FALSE; + + /* Setup server info */ + he = gethostbyname(lpAddress); + if (he != NULL) + { + /* Setup server socket info */ + ZeroMemory(&pInfo->ntpAddr, sizeof(SOCKADDR_IN)); + pInfo->ntpAddr.sin_family = AF_INET; // he->h_addrtype; + pInfo->ntpAddr.sin_port = htons(NTPPORT); + pInfo->ntpAddr.sin_addr = *((struct in_addr *)he->h_addr); + } + else + return FALSE; + + return TRUE; +} + + +static VOID +DestroyConnection(VOID) +{ + WSACleanup(); +} + + +static BOOL +GetTransmitTime(PTIMEPACKET ptp) +{ + return TRUE; +} + + +/* Send some data to wake the server up */ +static BOOL +SendData(PINFO pInfo) +{ + TIMEPACKET tp = { 0, 0 }; + INT Ret; + + ZeroMemory(&pInfo->SendPacket, sizeof(pInfo->SendPacket)); + pInfo->SendPacket.LiVnMode = 27; + if (!GetTransmitTime(&tp)) + return FALSE; + pInfo->SendPacket.TransmitTimestamp = tp; + + Ret = sendto(pInfo->Sock, + (char *)&pInfo->SendPacket, + sizeof(pInfo->SendPacket), + 0, + (SOCKADDR *)&pInfo->ntpAddr, + sizeof(SOCKADDR_IN)); + + if (Ret == SOCKET_ERROR) + return FALSE; + + return TRUE; +} + + +static ULONG +ReceiveData(PINFO pInfo) +{ + TIMEVAL timeVal; + FD_SET readFDS; + INT Ret; + ULONG ulTime = 0; + + /* Monitor socket for incoming connections */ + FD_ZERO(&readFDS); + FD_SET(pInfo->Sock, &readFDS); + + /* Set timeout values */ + timeVal.tv_sec = TIMEOUT / 1000; + timeVal.tv_usec = TIMEOUT % 1000; + + /* Check for data on the socket for TIMEOUT millisecs */ + Ret = select(0, &readFDS, NULL, NULL, &timeVal); + + if ((Ret != SOCKET_ERROR) && (Ret != 0)) + { + Ret = recvfrom(pInfo->Sock, + (char *)&pInfo->RecvPacket, + sizeof(pInfo->RecvPacket), + 0, + NULL, + NULL); + + if (Ret != SOCKET_ERROR) + ulTime = ntohl(pInfo->RecvPacket.TransmitTimestamp.dwInteger); + } + + return ulTime; +} + + +ULONG +GetServerTime(LPWSTR lpAddress) +{ + PINFO pInfo; + LPSTR lpAddr; + DWORD dwSize = wcslen(lpAddress) + 1; + ULONG ulTime = 0; + + pInfo = (PINFO)HeapAlloc(GetProcessHeap(), + 0, + sizeof(INFO)); + lpAddr = (LPSTR)HeapAlloc(GetProcessHeap(), + 0, + dwSize); + + if (pInfo && lpAddr) + { + if (WideCharToMultiByte(CP_ACP, + 0, + lpAddress, + -1, + lpAddr, + dwSize, + NULL, + NULL)) + { + if (InitConnection(pInfo, lpAddr)) + { + if (SendData(pInfo)) + { + ulTime = ReceiveData(pInfo); + } + } + + DestroyConnection(); + } + } + + if (pInfo) + HeapFree(GetProcessHeap(), 0, pInfo); + if (lpAddr) + HeapFree(GetProcessHeap(), 0, lpAddr); + + return ulTime; +} diff --git a/base/services/w32time/timedate.h b/base/services/w32time/timedate.h new file mode 100644 index 0000000000..7bbfd3b057 --- /dev/null +++ b/base/services/w32time/timedate.h @@ -0,0 +1,124 @@ +#ifndef _TIMEDATE_H +#define _TIMEDATE_H + +#include + +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#define WIN32_NO_STATUS + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//#include "resource.h" + +#define MAX_KEY_LENGTH 255 +#define MAX_VALUE_NAME 16383 +#define SERVERLISTSIZE 6 +#define BUFSIZE 1024 +#define NTPPORT 123 +#define ID_TIMER 1 + +typedef struct +{ + UINT idIcon; + UINT idName; + UINT idDescription; + APPLET_PROC AppletProc; +} APPLET, *PAPPLET; + +extern HINSTANCE hApplet; + + +/* dateandtime.c */ +INT_PTR CALLBACK DateTimePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL SystemSetTime(LPSYSTEMTIME lpSystemTime, BOOL SystemTime); + + +/* timezone.c */ +INT_PTR CALLBACK TimeZonePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + + +/* internettime.c */ +INT_PTR CALLBACK InetTimePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + + +/* timedate.c */ +#if DBG +VOID DisplayWin32ErrorDbg(DWORD dwErrorCode, const char *file, int line); +#define DisplayWin32Error(e) DisplayWin32ErrorDbg(e, __FILE__, __LINE__); +#else +VOID DisplayWin32Error(DWORD dwErrorCode); +#endif + + +/* clock.c */ +#define CLM_STOPCLOCK (WM_USER + 1) +#define CLM_STARTCLOCK (WM_USER + 2) + +BOOL RegisterClockControl(VOID); +VOID UnregisterClockControl(VOID); + + +/* ntpclient.c */ +// NTP timestamp +typedef struct _TIMEPACKET +{ + DWORD dwInteger; + DWORD dwFractional; +} TIMEPACKET, *PTIMEPACKET; + +// NTP packet +typedef struct _NTPPACKET +{ + BYTE LiVnMode; + BYTE Stratum; + char Poll; + char Precision; + long RootDelay; + long RootDispersion; + char ReferenceID[4]; + TIMEPACKET ReferenceTimestamp; + TIMEPACKET OriginateTimestamp; + TIMEPACKET ReceiveTimestamp; + TIMEPACKET TransmitTimestamp; +}NTPPACKET, *PNTPPACKET; + +ULONG GetServerTime(LPWSTR lpAddress); + + +/* monthcal.c */ +#define MCCM_SETDATE (WM_USER + 1) +#define MCCM_GETDATE (WM_USER + 2) +#define MCCM_RESET (WM_USER + 3) +#define MCCM_CHANGED (WM_USER + 4) + +#define MCCN_SELCHANGE (1) +typedef struct _NMMCCSELCHANGE +{ + NMHDR hdr; + WORD OldDay; + WORD OldMonth; + WORD OldYear; + WORD NewDay; + WORD NewMonth; + WORD NewYear; +} NMMCCSELCHANGE, *PNMMCCSELCHANGE; +#define MCCN_AUTOUPDATE (2) +typedef struct _NMMCCAUTOUPDATE +{ + NMHDR hdr; + SYSTEMTIME SystemTime; +} NMMCCAUTOUPDATE, *PNMMCCAUTOUPDATE; + +BOOL RegisterMonthCalControl(IN HINSTANCE hInstance); +VOID UnregisterMonthCalControl(IN HINSTANCE hInstance); + +#endif /* _TIMEDATE_H */ diff --git a/boot/bootdata/hivesft.inf b/boot/bootdata/hivesft.inf index b5c7926de3..99b25dfe2a 100644 --- a/boot/bootdata/hivesft.inf +++ b/boot/bootdata/hivesft.inf @@ -1393,6 +1393,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\Test","StopSc HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\Test","Unlock",0x00000000,"TestUnlockEvent" ; Time Zone Servers +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers",,0x00000000,"1" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","1",0x00000000,"pool.ntp.org" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","2",0x00000000,"asia.pool.ntp.org" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","3",0x00000000,"europe.pool.ntp.org" diff --git a/boot/bootdata/hivesys.inf b/boot/bootdata/hivesys.inf index bb0b3b8257..d18b17af88 100644 --- a/boot/bootdata/hivesys.inf +++ b/boot/bootdata/hivesys.inf @@ -1965,6 +1965,18 @@ HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ObjectName",0x00000000,"LocalS HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Start",0x00010001,0x00000002 HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Type",0x00010001,0x00000110 +; W32TIME service +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","DisplayName",0x00000000,%W32TIME_SERVICE% +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","Description",0x00000000,%W32TIME_SERVICE_DESCRIPTION% +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","Group",0x00000000,"Time" +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","ImagePath",0x00020000,"%SystemRoot%\system32\W32Time.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time","Type",0x00010001,0x00000010 +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time\Parameters","Type",0x00010000,"NTP" +HKLM,"SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient","SpecialPollInterval",0x00010001,0x00093a80 + ; Simple TCP services HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Description",0x00000000,%TCPSVCS_SERVICE_DECRIPTION% HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","DisplayName",0x00000000,%TCPSVCS_SERVICE% @@ -2181,6 +2193,9 @@ WINMGMT_SERVICE_DESCRIPTION="Provides interface to system management information WLANSVC_SERVICE="WLAN Service" WLANSVC_SERVICE_DESCRIPTION="WLAN Service" +W32TIME_SERVICE="Time Service" +W32TIME_SERVICE_DESCRIPTION="ReactOS Time Service" + WORKSTATION_SERVICE="Workstation" WORKSTATION_SERVICE_DESCRIPTION="Responsible for creating and maintaining network connections to servers." diff --git a/dll/cpl/timedate/internettime.c b/dll/cpl/timedate/internettime.c index 35e724948a..e0b14f50bf 100644 --- a/dll/cpl/timedate/internettime.c +++ b/dll/cpl/timedate/internettime.c @@ -93,12 +93,40 @@ SetNTPServer(HWND hwnd) UINT uSel; WCHAR szSel[4]; LONG lRet; + WCHAR buffer[256]; hList = GetDlgItem(hwnd, IDC_SERVERLIST); uSel = (UINT)SendMessageW(hList, CB_GETCURSEL, 0, 0); + SendDlgItemMessage (hwnd, IDC_SERVERLIST, WM_GETTEXT, 256 * sizeof(WCHAR), (LPARAM) buffer); + + /* If there is new data entered then save it in the registry + The same key name of "0" is used to store all user entered values + */ + if (uSel == -1) + { + lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Servers", + 0, + KEY_SET_VALUE, + &hKey); + if (lRet != ERROR_SUCCESS) + { + DisplayWin32Error(lRet); + return; + } + lRet = RegSetValueExW(hKey, + L"0", + 0, + REG_SZ, + (LPBYTE)buffer, + (wcslen(buffer) + 1) * sizeof(WCHAR)); + if (lRet != ERROR_SUCCESS) + DisplayWin32Error(lRet); + } + /* Server reg entries count from 1, * Combo boxes count from 0 */ uSel++; @@ -289,7 +317,7 @@ GetSyncSetting(HWND hwnd) DWORD dwSize; if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Parameters", + L"SYSTEM\\CurrentControlSet\\Services\\W32Time\\Parameters", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) @@ -303,7 +331,9 @@ GetSyncSetting(HWND hwnd) &dwSize) == ERROR_SUCCESS) { if (wcscmp(szData, L"NTP") == 0) - SendDlgItemMessageW(hwnd, IDC_AUTOSYNC, BM_SETCHECK, 0, 0); + SendDlgItemMessageW(hwnd, IDC_AUTOSYNC, BM_SETCHECK, BST_CHECKED, 0); + else + SendDlgItemMessageW(hwnd, IDC_AUTOSYNC, BM_SETCHECK, BST_UNCHECKED, 0); } RegCloseKey(hKey); @@ -319,6 +349,41 @@ OnInitDialog(HWND hwnd) CreateNTPServerList(hwnd); } +static VOID +OnAutoSync(BOOL Sync) +{ + HKEY hKey; + LONG lRet; + WCHAR szAuto[7]; + + if (Sync) + wcscpy(szAuto, L"NTP\0"); + else + wcscpy(szAuto, L"NoSync\0"); + + lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\CurrentControlSet\\Services\\W32Time\\Parameters", + 0, + KEY_SET_VALUE, + &hKey); + if (lRet != ERROR_SUCCESS) + { + DisplayWin32Error(lRet); + return; + } + + lRet = RegSetValueExW(hKey, + L"Type", + 0, + REG_SZ, + (LPBYTE)szAuto, + (wcslen(szAuto) + 1) * sizeof(WCHAR)); + if (lRet != ERROR_SUCCESS) + DisplayWin32Error(lRet); + + RegCloseKey(hKey); + +} /* Property page dialog callback */ INT_PTR CALLBACK @@ -349,7 +414,7 @@ InetTimePageProc(HWND hwndDlg, break; case IDC_SERVERLIST: - if (HIWORD(wParam) == CBN_SELCHANGE) + if ((HIWORD(wParam) == CBN_SELCHANGE) || (HIWORD(wParam) == CBN_EDITCHANGE)) { /* Enable the 'Apply' button */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); @@ -379,6 +444,12 @@ InetTimePageProc(HWND hwndDlg, { case PSN_APPLY: SetNTPServer(hwndDlg); + + if (SendDlgItemMessage(hwndDlg, IDC_AUTOSYNC, BM_GETCHECK,0,0) == BST_CHECKED) + OnAutoSync(TRUE); + else + OnAutoSync(FALSE); + return TRUE; default: diff --git a/dll/cpl/timedate/lang/bg-BG.rc b/dll/cpl/timedate/lang/bg-BG.rc index 9665e78fb1..2ae40c9ed1 100644 --- a/dll/cpl/timedate/lang/bg-BG.rc +++ b/dll/cpl/timedate/lang/bg-BG.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Сверяване от интернет" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Самосверяване през интернет от сървър за времето", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Сървър:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/cs-CZ.rc b/dll/cpl/timedate/lang/cs-CZ.rc index eb34743636..f447064905 100644 --- a/dll/cpl/timedate/lang/cs-CZ.rc +++ b/dll/cpl/timedate/lang/cs-CZ.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Čas v Internetu" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automaticky synchronizovat čas s časovým serverem v Internetu", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/da-DK.rc b/dll/cpl/timedate/lang/da-DK.rc index 1889f893c3..59c0d5472b 100644 --- a/dll/cpl/timedate/lang/da-DK.rc +++ b/dll/cpl/timedate/lang/da-DK.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Time" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatically synchronize with an Internet time server", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/de-DE.rc b/dll/cpl/timedate/lang/de-DE.rc index 5acea136c4..7afc80ecfc 100644 --- a/dll/cpl/timedate/lang/de-DE.rc +++ b/dll/cpl/timedate/lang/de-DE.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internetzeit" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatisch mit einem Internetzeitserver synchronisieren", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/el-GR.rc b/dll/cpl/timedate/lang/el-GR.rc index 0267525fe8..abc8550b66 100644 --- a/dll/cpl/timedate/lang/el-GR.rc +++ b/dll/cpl/timedate/lang/el-GR.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Time" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatically synchronize with an Internet time server", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/en-US.rc b/dll/cpl/timedate/lang/en-US.rc index 407bebcc32..59e83fee61 100644 --- a/dll/cpl/timedate/lang/en-US.rc +++ b/dll/cpl/timedate/lang/en-US.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Time" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatically &synchronize with an Internet time server", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/es-ES.rc b/dll/cpl/timedate/lang/es-ES.rc index f423ef791c..bd5a908058 100644 --- a/dll/cpl/timedate/lang/es-ES.rc +++ b/dll/cpl/timedate/lang/es-ES.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Hora de Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Sincronizar automáticamente con un servidor horario de Internet", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Servidor:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/et-EE.rc b/dll/cpl/timedate/lang/et-EE.rc index 16b4eef5b4..b1c465cb1c 100644 --- a/dll/cpl/timedate/lang/et-EE.rc +++ b/dll/cpl/timedate/lang/et-EE.rc @@ -40,7 +40,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Interneti-aeg" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "&Sünkrooni automaatselt mõne Interneti-ajaserveriga", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/eu-ES.rc b/dll/cpl/timedate/lang/eu-ES.rc index 6e307185d9..1b7a482b3e 100644 --- a/dll/cpl/timedate/lang/eu-ES.rc +++ b/dll/cpl/timedate/lang/eu-ES.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet-en ordua" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Interneteko ordutegi zerbitzari batekin automatikoki sinkronizatu", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Zerbitzaria:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/fr-FR.rc b/dll/cpl/timedate/lang/fr-FR.rc index 35af889496..9cd145884a 100644 --- a/dll/cpl/timedate/lang/fr-FR.rc +++ b/dll/cpl/timedate/lang/fr-FR.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Temps Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Synchroniser automatiquement avec un serveur d'heure Internet", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Serveur:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/he-IL.rc b/dll/cpl/timedate/lang/he-IL.rc index 024cd9af41..f1ebafdc00 100644 --- a/dll/cpl/timedate/lang/he-IL.rc +++ b/dll/cpl/timedate/lang/he-IL.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "שעון אינטרנט" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "בצע סנכרון עם שרת שעון באינטרנט", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "שרת:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/hu-HU.rc b/dll/cpl/timedate/lang/hu-HU.rc index de7a4f7533..1a37ed9519 100644 --- a/dll/cpl/timedate/lang/hu-HU.rc +++ b/dll/cpl/timedate/lang/hu-HU.rc @@ -35,7 +35,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Idő" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Szinkronizálja a számítógép óráját egy internetes kiszolgálóval", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Kiszolgáló:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/id-ID.rc b/dll/cpl/timedate/lang/id-ID.rc index 7ca2b064c5..8c31a1a23a 100644 --- a/dll/cpl/timedate/lang/id-ID.rc +++ b/dll/cpl/timedate/lang/id-ID.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Waktu Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Otomatis mensinkronisasi dengan server waktu Internet", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/it-IT.rc b/dll/cpl/timedate/lang/it-IT.rc index d8d3e4ed9d..201ea28496 100644 --- a/dll/cpl/timedate/lang/it-IT.rc +++ b/dll/cpl/timedate/lang/it-IT.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Ora Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Sincronizza automaticamente con il server di riferimento ora", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/ja-JP.rc b/dll/cpl/timedate/lang/ja-JP.rc index c12a612f65..99263dff8e 100644 --- a/dll/cpl/timedate/lang/ja-JP.rc +++ b/dll/cpl/timedate/lang/ja-JP.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "インターネット時刻" FONT 9, "MS UI Gothic", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "自動的にインターネット時刻サーバーと同期する", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "サーバー:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/nl-NL.rc b/dll/cpl/timedate/lang/nl-NL.rc index a395b6bb32..dddf6e9576 100644 --- a/dll/cpl/timedate/lang/nl-NL.rc +++ b/dll/cpl/timedate/lang/nl-NL.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Tijd" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 55, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 55, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Klok &automatisch met een tijdserver op het Internet synchroniseren.", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/no-NO.rc b/dll/cpl/timedate/lang/no-NO.rc index 0c39aab50e..1b43ef6f27 100644 --- a/dll/cpl/timedate/lang/no-NO.rc +++ b/dll/cpl/timedate/lang/no-NO.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internett tid" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatisk sykroniser klokken med internett tid serveren", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/pl-PL.rc b/dll/cpl/timedate/lang/pl-PL.rc index 8a2e1e2c28..a2a93d17cb 100644 --- a/dll/cpl/timedate/lang/pl-PL.rc +++ b/dll/cpl/timedate/lang/pl-PL.rc @@ -42,7 +42,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Czas z Internetu" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatycznie synchronizuj czas z internetowym serwerem czasu", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Serwer:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/pt-BR.rc b/dll/cpl/timedate/lang/pt-BR.rc index 255e984e09..b84d407bae 100644 --- a/dll/cpl/timedate/lang/pt-BR.rc +++ b/dll/cpl/timedate/lang/pt-BR.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Horário na Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "&Sincronizar automaticamente com um servidor de horário na Internet", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Servidor:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/ro-RO.rc b/dll/cpl/timedate/lang/ro-RO.rc index beaca4a451..308c45c766 100644 --- a/dll/cpl/timedate/lang/ro-RO.rc +++ b/dll/cpl/timedate/lang/ro-RO.rc @@ -35,7 +35,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Timp Internet" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "&Permite sincronizarea automată cu un server de oră:", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/ru-RU.rc b/dll/cpl/timedate/lang/ru-RU.rc index 2dfe392ce3..9ad368508b 100644 --- a/dll/cpl/timedate/lang/ru-RU.rc +++ b/dll/cpl/timedate/lang/ru-RU.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Время через Интернет" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "&Выполнять синхронизацию с сервером времени в Интернете", IDC_AUTOSYNC, 11, 7, 246, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Сервер:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/sk-SK.rc b/dll/cpl/timedate/lang/sk-SK.rc index ba7097249e..cd011f7380 100644 --- a/dll/cpl/timedate/lang/sk-SK.rc +++ b/dll/cpl/timedate/lang/sk-SK.rc @@ -40,7 +40,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internetový čas" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automaticky &synchronizovať čas s internetovým časovým serverom", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/sq-AL.rc b/dll/cpl/timedate/lang/sq-AL.rc index 5add59efa9..82ab28654c 100644 --- a/dll/cpl/timedate/lang/sq-AL.rc +++ b/dll/cpl/timedate/lang/sq-AL.rc @@ -37,7 +37,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Ora Internetit" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatikisht sinkronizohu me një server kohën e Internetit", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/sv-SE.rc b/dll/cpl/timedate/lang/sv-SE.rc index 8f400273ea..129c4457e3 100644 --- a/dll/cpl/timedate/lang/sv-SE.rc +++ b/dll/cpl/timedate/lang/sv-SE.rc @@ -35,7 +35,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet Time" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Automatically synchronize with an Internet time server", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/th-TH.rc b/dll/cpl/timedate/lang/th-TH.rc index 5f932926dd..f3c8a210ea 100644 --- a/dll/cpl/timedate/lang/th-TH.rc +++ b/dll/cpl/timedate/lang/th-TH.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "เวลาของอินเทอร์เน็ต" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "กำลังปรับเทียบเวลาอัตโนมัติกับเครื่องแม่ข่ายอินเทอร์เน็ต", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "เครื่องแม่ข่าย:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/tr-TR.rc b/dll/cpl/timedate/lang/tr-TR.rc index 7b311fdb63..ebfcfee146 100644 --- a/dll/cpl/timedate/lang/tr-TR.rc +++ b/dll/cpl/timedate/lang/tr-TR.rc @@ -35,7 +35,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Umûmî Ağ Zamânı" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Bir Umûmî Ağ Zamânı Sunucusuyla Kendiliğinden Eşleştir", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Sunucu:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/uk-UA.rc b/dll/cpl/timedate/lang/uk-UA.rc index 67399b3f68..454e68396b 100644 --- a/dll/cpl/timedate/lang/uk-UA.rc +++ b/dll/cpl/timedate/lang/uk-UA.rc @@ -41,7 +41,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Час Інтернету" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Автоматично синхронізувати з сервером часу в Інтернеті", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "Сервер:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/zh-CN.rc b/dll/cpl/timedate/lang/zh-CN.rc index bd6567314e..a83db55100 100644 --- a/dll/cpl/timedate/lang/zh-CN.rc +++ b/dll/cpl/timedate/lang/zh-CN.rc @@ -33,7 +33,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Internet 时间" FONT 9, "宋体", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "自动与 Internet 时间服务器同步(&S)", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "服务器:", IDC_SERVERTEXT, 34, 22, 28, 13 diff --git a/dll/cpl/timedate/lang/zh-TW.rc b/dll/cpl/timedate/lang/zh-TW.rc index 5784606426..83a8461f5f 100644 --- a/dll/cpl/timedate/lang/zh-TW.rc +++ b/dll/cpl/timedate/lang/zh-TW.rc @@ -35,7 +35,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "互联网时间" FONT 9, "新細明體", 0, 0, 0x0 BEGIN - COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "自动与互联网时间服务器同步(&S)", IDC_AUTOSYNC, 11, 7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP LTEXT "服务器:", IDC_SERVERTEXT, 34, 22, 28, 13