Durch exakte Uhrzeit aus dem Internet die Systemuhr stellen lassen



  • Ich kann dich beruhigen WebFritzi - es ist nicht leicht, was zufinden, was es nicht gibt. Ich glaub sogar Dönerbudensimulationen, Mückenpopulationsberechnung und eine Berechnung wieviel Toilettenpapier man in der Woche braucht ( in cm^2 ) gibts schon. Auch wenn ich selbst noch keine gesehen habe 😉



  • WebFritzi schrieb:

    Luckie schrieb:

    http://www.luckie-online.de/ -> InetTime. 😉

    Wenn du auch noch sagen könntest, wie DU das bewerkstelligt hast, wäre das echt super.

    Source ist doch dabei. Ist zwar Delphi-Language aber die API-Funktionen heißen genauso. Kommentiert ist der Source, glaube ich, auch noch.

    P.S.: Komisch, ich will immer Programme schreiben, die du schon längst geschrieben hast. (siehe z.B. NetSend) 😉

    Einer ist immer schneller. :p



  • #ifndef TimeSyncH
    #define TimeSyncH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <NMDayTim.hpp>
    #include <Psock.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TNMDayTime *time;
            TButton *Button1;
            TButton *Button2;
            TEdit *Edit1;
            TImage *Image1;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall VerbFehler(TObject *Sender);
            void __fastcall WrongHost(bool &Handled);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <dos.h>
    #pragma hdrstop
    
    #include "TimeSync.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    AnsiString output="Uhrzeit: ";
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    /*Edit1->Text=time->DayTimeStr ;
      AnsiString tmp=Edit1->Text;
      int i=1;
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      test->Text=Edit1->Text.SubString(i,8);
      struct  time t;
      t.ti_hour=StrToInt(test->Text.SubString(1,2));
      t.ti_min=StrToInt(test->Text.SubString(4,2));
      t.ti_sec=StrToInt(test->Text.SubString(7,2));
      settime(&t);*/
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      AnsiString tmp=time->DayTimeStr;
      int i=1;
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      Edit1->Text=output+tmp.SubString(i,8);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      AnsiString tmp=time->DayTimeStr;
      int i=1;
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      while(tmp[i++]!=' ');
      Edit1->Text=output+tmp.SubString(i,8);
      tmp=tmp.SubString(i,8);
      struct time t;
      t.ti_hour=StrToInt(tmp.SubString(1,2));
      t.ti_min=StrToInt(tmp.SubString(4,2));
      t.ti_sec=StrToInt(tmp.SubString(7,2));
      settime(&t);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::VerbFehler(TObject *Sender)
    {
      Edit1->Text="Verbindungsfehler";        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::WrongHost(bool &Handled)
    {
      Edit1->Text="Host Fehler";        
    }
    //---------------------------------------------------------------------------
    


  • Bei mir (BCB3) gibt es kein TNMDayTime-Objekt. Ich würde das auch gerne auf LowLevel-Ebene über Sockets machen.

    @unreg: Wo werden denn bitte die Funktionen "VerFehler" und "WrongHost" aufgerufen?



  • Meins ist low level. 😉



  • Luckie schrieb:

    Meins ist low level. 😉

    Und genau deswegen werd ich mir das auch mal anschauen. Sorry, ich wusst nicht, dass da auch der Code dabei ist.



  • Mehr Low-Level geht's nicht (außer asm):

    /*------------------------------------------------------------------------
       NETTIME.C - Zeit von Internet-Server erfragen und als Systemzeit setzen
                    (c) Charles Petzold, 1998
      -------------------------------------------------------------------------*/
    
    #include <windows.h>
    #include "resource.h"
    
    #define WM_SOCKET_NOTIFY (WM_USER + 1)
    #define ID_TIMER         1
    
    LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ;
    BOOL    CALLBACK MainDlg   (HWND, UINT, WPARAM, LPARAM) ;
    BOOL    CALLBACK ServerDlg (HWND, UINT, WPARAM, LPARAM) ;
    
    void ChangeSystemTime (HWND hwndEdit, ULONG ulTime) ;
    void FormatUpdatedTime (HWND hwndEdit, SYSTEMTIME * pstOld, SYSTEMTIME * pstNew) ;
    void EditPrintf (HWND hwndEdit, TCHAR * szFormat, ...) ;
    HINSTANCE hInst ;
    HWND      hwndModeless ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("NetTime") ;
         HWND         hwnd ;
         MSG          msg ;
         RECT         rect ;
         WNDCLASS     wndclass ;
    
         hInst = hInstance ;
    
         wndclass.style         = 0 ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = NULL ;
         wndclass.hbrBackground = NULL ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
    
         if (!RegisterClass (&wndclass))
         {
              // UNICODE-Kompilierung ist die einzige realistische Fehlermöglichkeit
              MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"),
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
              // Programmfenster anlegen
         hwnd = CreateWindow (szAppName, TEXT ("Systemzeit aus Internet beziehen"),
                              WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER | WS_MINIMIZEBOX,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
    
         // modusloses Dialogfeld anlegen
         hwndModeless = CreateDialog (hInstance, szAppName, hwnd, MainDlg) ;
    
         // Abmessungen des Hauptfensters denen des Dialogfelds anpassen
         // und beide Fenster anzeigen
         GetWindowRect (hwndModeless, &rect) ;
          AdjustWindowRect (&rect, WS_CAPTION | WS_BORDER, FALSE) ;
    
         SetWindowPos (hwnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE) ;
    
         ShowWindow (hwndModeless, SW_SHOW) ;
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
    
         // Nachrichtenschleife mit Erweiterung für das moduslose Dialogfeld
         while (GetMessage (&msg, NULL, 0, 0))
         {
              if (hwndModeless == 0 || !IsDialogMessage (hwndModeless, &msg))
              {
                   TranslateMessage (&msg) ;
                   DispatchMessage (&msg) ;
              }
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         switch (message)
         {
         case WM_SETFOCUS:
              SetFocus (hwndModeless) ;
              return 0 ;
    
         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    BOOL CALLBACK MainDlg (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static char   szIPAddr[32] = { "132.163.135.130" } ;
         static HWND   hwndButton, hwndEdit ;
         static SOCKET sock ;
         static struct sockaddr_in sa ;
         static TCHAR  szOKLabel[32] ;
         int           iError, iSize ;
         unsigned long ulTime ;
         WORD          wEvent, wError ;
         WSADATA       WSAData ;
    
         switch (message)
         {
         case WM_INITDIALOG:
              hwndButton = GetDlgItem (hwnd, IDOK) ;
              hwndEdit = GetDlgItem (hwnd, IDC_TEXTOUT) ;
              return TRUE ;
    
         case WM_COMMAND:
              switch (LOWORD (wParam))
              {
              case IDC_SERVER:  // Auswahl eines anderen Zeit-Servers
                   DialogBoxParam (hInst, TEXT ("Servers"), hwnd, ServerDlg, (LPARAM) szIPAddr) ;
                   return TRUE ;
    
              case IDOK:
                   // WSAStartup aufrufen und Beschreibungstext anzeigen
                   if (iError = WSAStartup (MAKEWORD(2,0), &WSAData))
                   {
                        EditPrintf (hwndEdit, TEXT ("WSAStartup-Fehler #%i.\r\n"), iError) ;
                        return TRUE ;
                   }
                   EditPrintf (hwndEdit, TEXT ("%hs gestartet.\r\n"), WSAData.szDescription);
    
                   // Socket öffnen
                   sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
    
                   if (sock == INVALID_SOCKET)
                   {
                        EditPrintf (hwndEdit,
                                    TEXT ("Fehler beim Anlegen des Sockets: #%i.\r\n"),
                                    WSAGetLastError ()) ;
                        WSACleanup () ;
                        return TRUE ;
                   }
                   EditPrintf (hwndEdit, TEXT ("Socket %i angelegt.\r\n"), sock) ;
    
                   // WSAAsyncSelect aufrufen
                   if (SOCKET_ERROR == WSAAsyncSelect (sock, hwnd, WM_SOCKET_NOTIFY,
                                                        FD_CONNECT | FD_READ))
                   {
                        EditPrintf (hwndEdit,
                                    TEXT ("WSAAsyncSelect-Fehler #%i.\r\n"),
                                    WSAGetLastError ()) ;
                        closesocket (sock) ;
                        WSACleanup () ;
                        return TRUE ;
                   }
    
                   // Aufruf von "connect" mit IP-Adresse und Portnummer des Zeitservers
                   sa.sin_family           = AF_INET ;
                   sa.sin_port             = htons (IPPORT_TIMESERVER) ;
                   sa.sin_addr.S_un.S_addr = inet_addr (szIPAddr) ;
    
                   connect(sock, (SOCKADDR *) &sa, sizeof (sa)) ;
    
                   // "connect" wird wegen den vorherigen WSAAsyncSelect-Aufrufs SOCKET_ERROR liefern,
                   // da die Funktion als potentiell blockierende Funktion die Kontrolle unmittelbar
                   // (also noch vor dem Herstellen der Verbindung) zurückgibt. Der Statuscode
                   // WSAEWOULDBLOCK ist deshalb nicht als Fehler zu betrachten.
                   // Hier die Reaktion auf unwartete Fehler:
                   if (WSAEWOULDBLOCK != (iError = WSAGetLastError ()))
                   {
                        EditPrintf (hwndEdit, TEXT ("Connect-Fehler #%i.\r\n"), iError) ;
                        closesocket (sock) ;
                        WSACleanup () ;
                        return TRUE ;
                   }
                   EditPrintf (hwndEdit, TEXT ("Verbinde mit %hs..."), szIPAddr) ;
    
                   // Das Ergebnis des "connect"-Aufrufs wird über WM_SOCKET_NOTIFY angeliefert.
                   // Timer setzen und Schaltflächenbeschriftung auf "Abbrechen" ändern
                   SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
                   GetWindowText (hwndButton, szOKLabel, sizeof (szOKLabel) / sizeof (TCHAR)) ;
                   SetWindowText (hwndButton, TEXT ("Abbruch")) ;
                   SetWindowLong (hwndButton, GWL_ID, IDCANCEL) ;
                   return TRUE ;
    
              case IDCANCEL:
                   closesocket (sock) ;
                   sock = 0 ;
                   WSACleanup () ;
                   SetWindowText (hwndButton, szOKLabel) ;
                   SetWindowLong (hwndButton, GWL_ID, IDOK) ;
    
                   KillTimer (hwnd, ID_TIMER) ;
                   EditPrintf (hwndEdit, TEXT ("\r\nSocket geschlossen.\r\n")) ;
                   return TRUE ;
    
              case IDC_CLOSE:
                   if (sock)
                        SendMessage (hwnd, WM_COMMAND, IDCANCEL, 0) ;
    
                   DestroyWindow (GetParent (hwnd)) ;
                   return TRUE ;
              }
              return FALSE ;
    
         case WM_TIMER:
              EditPrintf (hwndEdit, TEXT (".")) ;
              return TRUE ;
    
         case WM_SOCKET_NOTIFY:
              wEvent = WSAGETSELECTEVENT (lParam) ;   // d.h. LOWORD
              wError = WSAGETSELECTERROR (lParam) ;   // d.h. HIWORD
    
              // Behandlung zweier für WSAAsyncSelect spezifizierte Ereignisse
              switch (wEvent)
              {
              case FD_CONNECT:                   // Rückmeldung von connect()
                   EditPrintf (hwndEdit, TEXT ("\r\n")) ;
    
                   if (wError)
                   {
                        EditPrintf (hwndEdit, TEXT ("Connect Fehler #%i."), wError) ;
                        SendMessage (hwnd, WM_COMMAND, IDCANCEL, 0) ;
                        return TRUE ;
                   }
                   EditPrintf (hwndEdit, TEXT ("Verbunden mit %hs.\r\n"), szIPAddr) ;
    
                   // Versuche Daten zu empfangen. Der Aufruf wird einen WSAEWOULDBLOCK-Fehler
                   // und ein FD_READ-Ereignis generieren.
                   recv (sock, (char *) &ulTime, 4, MSG_PEEK) ;
                   EditPrintf (hwndEdit, TEXT ("Warte auf Empfang...")) ;
                    return TRUE ;
    
               case FD_READ:                     // Rückmeldung von recv()
                   KillTimer (hwnd, ID_TIMER) ;
                   EditPrintf (hwndEdit, TEXT ("\r\n")) ;
    
                   if (wError)
                   {
                        EditPrintf (hwndEdit, TEXT ("FD_READ error #%i."), wError) ;
                        SendMessage (hwnd, WM_COMMAND, IDCANCEL, 0) ;
                        return TRUE ;
                   }
                   // Zeit abfragen und Bytes vertauschen
                   iSize = recv (sock, (char *) &ulTime, 4, 0) ;
                   ulTime = ntohl (ulTime) ;
                   EditPrintf (hwndEdit,
                               TEXT ("Aktuelle Zeit ist: %u Sekunden ")
                               TEXT ("seit 1.1.1900, 0:00 Uhr.\r\n"), ulTime) ;
    
                   // Systemzeit setzen
                   ChangeSystemTime (hwndEdit, ulTime) ;
                   SendMessage (hwnd, WM_COMMAND, IDCANCEL, 0) ;
                   return TRUE ;
              }
              return FALSE ;
         }
         return FALSE ;
    }
    
    BOOL CALLBACK ServerDlg (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static char * szServer ;
         static WORD   wServer = IDC_SERVER1 ;
         char          szLabel [64] ;
    
         switch (message)
         {
         case WM_INITDIALOG:
              szServer = (char *) lParam ;
              CheckRadioButton (hwnd, IDC_SERVER1, IDC_SERVER10, wServer) ;
              return TRUE ;
    
         case WM_COMMAND:
              switch (LOWORD (wParam))
              {
              case IDC_SERVER1:
              case IDC_SERVER2:
              case IDC_SERVER3:
              case IDC_SERVER4:
              case IDC_SERVER5:
              case IDC_SERVER6:
              case IDC_SERVER7:
              case IDC_SERVER8:
              case IDC_SERVER9:
              case IDC_SERVER10:
                   wServer = LOWORD (wParam) ;
                   return TRUE ;
    
              case IDOK:
                   GetDlgItemTextA (hwnd, wServer, szLabel, sizeof (szLabel)) ;
                   strtok (szLabel, "(") ;
                   strcpy (szServer, strtok (NULL, ")")) ;
                   EndDialog (hwnd, TRUE) ;
                   return TRUE ;
    
              case IDCANCEL:
                   EndDialog (hwnd, FALSE) ;
                   return TRUE ;
              }
              break ;
         }
         return FALSE ;
    }
    
    void ChangeSystemTime (HWND hwndEdit, ULONG ulTime)
    {
         FILETIME      ftNew ;
         LARGE_INTEGER li ;
         SYSTEMTIME    stOld, stNew ;
    
         GetLocalTime (&stOld) ;
    
         stNew.wYear         = 1900 ;
         stNew.wMonth        = 1 ;
         stNew.wDay          = 1 ;
         stNew.wHour         = 0 ;
         stNew.wMinute       = 0 ;
         stNew.wSecond       = 0 ;
         stNew.wMilliseconds = 0 ;
    
         SystemTimeToFileTime (&stNew, &ftNew) ;
         li = * (LARGE_INTEGER *) &ftNew ;
         li.QuadPart += (LONGLONG) 10000000 * ulTime ;
         ftNew = * (FILETIME *) &li ;
         FileTimeToSystemTime (&ftNew, &stNew) ;
    
         if (SetSystemTime (&stNew))
         {
              GetLocalTime (&stNew) ;
              FormatUpdatedTime (hwndEdit, &stOld, &stNew) ;
         }
         else
              EditPrintf (hwndEdit, TEXT ("Konnte Systemzeit nicht ändern.")) ;
    }
    
    void FormatUpdatedTime (HWND hwndEdit, SYSTEMTIME * pstOld, SYSTEMTIME * pstNew)
    {
         TCHAR szDateOld [64], szTimeOld [64], szDateNew [64], szTimeNew [64] ;
    
         GetDateFormat (LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE | DATE_SHORTDATE,
                        pstOld, NULL, szDateOld, sizeof (szDateOld)) ;
    
         GetTimeFormat (LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE |
                             TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
                        pstOld, NULL, szTimeOld, sizeof (szTimeOld)) ;
    
         GetDateFormat (LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE | DATE_SHORTDATE,
                        pstNew, NULL, szDateNew, sizeof (szDateNew)) ;
    
         GetTimeFormat (LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE |
                             TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
                        pstNew, NULL, szTimeNew, sizeof (szTimeNew)) ;
    
         EditPrintf (hwndEdit,
                     TEXT ("Systemdatum und Systemzeit wurden von")
                     TEXT ("\r\n\t%s, %s.%03i auf\r\n\t%s, %s.%03i korrigiert."),
                     szDateOld, szTimeOld, pstOld->wMilliseconds,
                     szDateNew, szTimeNew, pstNew->wMilliseconds) ;
    }
    
    void EditPrintf (HWND hwndEdit, TCHAR * szFormat, ...)
    {
         TCHAR   szBuffer [1024] ;
         va_list pArgList ;
    
         va_start (pArgList, szFormat) ;
         wvsprintf (szBuffer, szFormat, pArgList) ;
         va_end (pArgList) ;
         SendMessage (hwndEdit, EM_SETSEL, (WPARAM) -1, (LPARAM) -1) ;
         SendMessage (hwndEdit, EM_REPLACESEL, FALSE, (LPARAM) szBuffer) ;
         SendMessage (hwndEdit, EM_SCROLLCARET, 0, 0) ;
    }
    


  • WOW. Das werd ich mir demnächst mal genauer ansehen. Danke.

    P.S.: Könntest du bitte noch die Resource.rc und die Resource.h hier angeben? Das wäre echt nett.



  • Aber sicher:

    NetTime.rc

    //Microsoft Developer Studio generated resource script.
    //
    #include "resource.h"
    
    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"
    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS
    
    /////////////////////////////////////////////////////////////////////////////
    // Deutsch (Deutschland) resources
    
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
    #ifdef _WIN32
    LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
    #pragma code_page(1252)
    #endif //_WIN32
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Dialog
    //
    
    NETTIME DIALOG DISCARDABLE  0, 0, 270, 150
    STYLE WS_CHILD
    FONT 8, "MS Sans Serif"
    BEGIN
        DEFPUSHBUTTON   "Systemzeit korrigieren",IDOK,95,129,80,14
        PUSHBUTTON      "Schließen",IDC_CLOSE,183,129,80,14
        PUSHBUTTON      "Server wählen...",IDC_SERVER,7,129,80,14
        EDITTEXT        IDC_TEXTOUT,7,7,253,110,ES_MULTILINE | ES_AUTOVSCROLL |
                        ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
    END
    
    SERVERS DIALOG DISCARDABLE  20, 20, 274, 202
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "NIST-Zeit-Server"FONT 8, "MS Sans Serif"
    BEGIN
        DEFPUSHBUTTON   "OK",IDOK,73,181,50,14
        PUSHBUTTON      "Abbrechen",IDCANCEL,150,181,50,14
        CONTROL         "time-a.timefreq.bldrdoc.gov (132.163.135.130) NIST, Boulder, Colorado",
                        IDC_SERVER1,"Button",BS_AUTORADIOBUTTON,9,7,256,16
        CONTROL         "time-b.timefreq.bldrdoc.gov (132.163.135.131) NIST, Boulder, Colorado",
                        IDC_SERVER2,"Button",BS_AUTORADIOBUTTON,9,24,256,16
        CONTROL         "time-c.timefreq.bldrdoc.gov (132.163.135.132) Boulder, Colorado, ",
                        IDC_SERVER3,"Button",BS_AUTORADIOBUTTON,9,41,256,16
        CONTROL         "utcnist.colorado.edu (128.138.140.44) University of Colorado, Boulder",
                        IDC_SERVER4,"Button",BS_AUTORADIOBUTTON,9,58,256,16
        CONTROL         "time.nist.gov (192.43.244.18) NCAR, Boulder, Colorado",
                        IDC_SERVER5,"Button",BS_AUTORADIOBUTTON,9,75,256,16
        CONTROL         "time-a.nist.gov (129.6.16.35) NIST, Gaithersburg, Maryland",
                        IDC_SERVER6,"Button",BS_AUTORADIOBUTTON,9,92,256,16
        CONTROL         "time-b.nist.gov (129.6.16.36) NIST, Gaithersburg, Maryland",
                        IDC_SERVER7,"Button",BS_AUTORADIOBUTTON,9,109,256,16
        CONTROL         "time-nw.nist.gov (131.107.1.10) Microsoft, Redmond, Washington",
                        IDC_SERVER8,"Button",BS_AUTORADIOBUTTON,9,126,256,16
        CONTROL         "utcnist.reston.mci.net (204.70.131.13) MCI, Reston, Virginia",
                        IDC_SERVER9,"Button",BS_AUTORADIOBUTTON,9,143,256,16
        CONTROL         "nist1.data.com (209.0.72.7) Datum, San Jose, California",
                        IDC_SERVER10,"Button",BS_AUTORADIOBUTTON,9,160,256,16
    END
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // DESIGNINFO
    //
    
    #ifdef APSTUDIO_INVOKED
    GUIDELINES DESIGNINFO DISCARDABLE 
    BEGIN
        "NETTIME", DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 263
            TOPMARGIN, 7
            BOTTOMMARGIN, 143
        END
    
        "SERVERS", DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 267
            TOPMARGIN, 7
            BOTTOMMARGIN, 195
        END
    END
    #endif    // APSTUDIO_INVOKED
    
    #endif    // Deutsch (Deutschland) resources
    /////////////////////////////////////////////////////////////////////////////
    
    /////////////////////////////////////////////////////////////////////////////
    // Englisch (USA) resources
    
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
    #ifdef _WIN32
    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    #pragma code_page(1252)
    #endif //_WIN32
    
    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //
    
    1 TEXTINCLUDE DISCARDABLE
    BEGIN
        "resource.h\0"
    END
    
    2 TEXTINCLUDE DISCARDABLE
    BEGIN
        "#include ""afxres.h""\r\n"
        "\0"
    END
    
    3 TEXTINCLUDE DISCARDABLE
    BEGIN
        "\r\n"
        "\0"
    END
    
    #endif    // APSTUDIO_INVOKED
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Dialog
    //
    
    SERVERS DIALOG DISCARDABLE  20, 20, 274, 202
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "NIST Time Service Servers"
    FONT 8, "MS Sans Serif"
    BEGIN
        DEFPUSHBUTTON   "OK",IDOK,73,181,50,14
        PUSHBUTTON      "Cancel",IDCANCEL,150,181,50,14
        CONTROL         "time-a.timefreq.bldrdoc.gov (132.163.135.130) NIST, Boulder, Colorado",
                        IDC_SERVER1,"Button",BS_AUTORADIOBUTTON,9,7,256,16
        CONTROL         "time-b.timefreq.bldrdoc.gov (132.163.135.131) NIST, Boulder, Colorado",
                        IDC_SERVER2,"Button",BS_AUTORADIOBUTTON,9,24,256,16
        CONTROL         "time-c.timefreq.bldrdoc.gov (132.163.135.132) Boulder, Colorado, ",
                        IDC_SERVER3,"Button",BS_AUTORADIOBUTTON,9,41,256,16
        CONTROL         "utcnist.colorado.edu (128.138.140.44) University of Colorado, Boulder",
                        IDC_SERVER4,"Button",BS_AUTORADIOBUTTON,9,58,256,16
        CONTROL         "time.nist.gov (192.43.244.18) NCAR, Boulder, Colorado",
                        IDC_SERVER5,"Button",BS_AUTORADIOBUTTON,9,75,256,16
        CONTROL         "time-a.nist.gov (129.6.16.35) NIST, Gaithersburg, Maryland",
                        IDC_SERVER6,"Button",BS_AUTORADIOBUTTON,9,92,256,16
        CONTROL         "time-b.nist.gov (129.6.16.36) NIST, Gaithersburg, Maryland",
                        IDC_SERVER7,"Button",BS_AUTORADIOBUTTON,9,109,256,16
        CONTROL         "time-nw.nist.gov (131.107.1.10) Microsoft, Redmond, Washington",
                        IDC_SERVER8,"Button",BS_AUTORADIOBUTTON,9,126,256,16
        CONTROL         "utcnist.reston.mci.net (204.70.131.13) MCI, Reston, Virginia",
                        IDC_SERVER9,"Button",BS_AUTORADIOBUTTON,9,143,256,16
        CONTROL         "nist1.data.com (209.0.72.7) Datum, San Jose, California",
                        IDC_SERVER10,"Button",BS_AUTORADIOBUTTON,9,160,256,16
    END
    
    NETTIME DIALOG DISCARDABLE  0, 0, 270, 150
    STYLE WS_CHILD
    FONT 8, "MS Sans Serif"
    BEGIN
        DEFPUSHBUTTON   "Set Correct Time",IDOK,95,129,80,14
        PUSHBUTTON      "Close",IDC_CLOSE,183,129,80,14
        PUSHBUTTON      "Select Server...",IDC_SERVER,7,129,80,14
        EDITTEXT        IDC_TEXTOUT,7,7,253,110,ES_MULTILINE | ES_AUTOVSCROLL |
                        ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
    END
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // DESIGNINFO
    //
    
    #ifdef APSTUDIO_INVOKED
    GUIDELINES DESIGNINFO DISCARDABLE
    BEGIN
        "SERVERS", DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 267
            TOPMARGIN, 7
            BOTTOMMARGIN, 195
        END
    
        "NETTIME", DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 263
            TOPMARGIN, 7
            BOTTOMMARGIN, 143
        END
    END
    #endif    // APSTUDIO_INVOKED
    
    #endif    // Englisch (USA) resources
    /////////////////////////////////////////////////////////////////////////////
    
    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
    
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
    

    resource.h

    //{{NO_DEPENDENCIES}}
    // Microsoft Developer Studio generated include file.
    // Used by NetTime.rc
    //
    #define IDC_TEXTOUT                     101
    #define IDC_SERVER1                     1001
    #define IDC_SERVER2                     1002
    #define IDC_SERVER3                     1003
    #define IDC_SERVER4                     1004
    #define IDC_SERVER5                     1005
    #define IDC_SERVER6                     1006
    #define IDC_SERVER7                     1007
    #define IDC_SERVER8                     1008
    #define IDC_SERVER9                     1009
    #define IDC_SERVER10                    1010
    #define IDC_SERVER                      1011
    #define IDC_CLOSE                       1012
    
    // Next default values for new objects
    //
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        104
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1013
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif
    


  • Danke, du! 🙂


Anmelden zum Antworten