各位大侠,有礼了!是用API函数SETLOCALTIME()吗?怎么用?

解决方案 »

  1.   

    {1.} { 
      For Windows 9X/ME/NT/2000/XP:   The SetLocalTime function fails if the calling process does not have 
      the SE_SYSTEMTIME_NAME privilege. This privilege is disabled by default. 
      Use the AdjustTokenPrivileges function to enable this privilege. 
    } function SetPCSystemTime(dDateTime: TDateTime): Boolean; 
    const 
      SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege'; 
    var 
      hToken: THandle; 
      ReturnLength: DWORD; 
      tkp, PrevTokenPriv: TTokenPrivileges; 
      luid: TLargeInteger; 
      dSysTime: TSystemTime; 
    begin 
      Result := False; 
      if (Win32Platform = VER_PLATFORM_WIN32_NT) then 
      begin 
        if OpenProcessToken(GetCurrentProcess, 
          TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then 
        begin 
          try 
            if not LookupPrivilegeValue(nil, SE_SYSTEMTIME_NAME, luid) then Exit; 
            tkp.PrivilegeCount := 1; 
            tkp.Privileges[0].luid := luid; 
            tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
            if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTOKENPRIVILEGES), 
              PrevTokenPriv, ReturnLength) then 
              Exit; 
            if (GetLastError <> ERROR_SUCCESS) then 
            begin 
              raise Exception.Create(SysErrorMessage(GetLastError)); 
              Exit; 
            end; 
          finally 
            CloseHandle(hToken); 
          end; 
        end; 
      end; 
      DateTimeToSystemTime(dDateTime, dSysTime); 
      Result := Windows.SetLocalTime(dSysTime); 
    end; {************************************************************} {2.} procedure TForm1.Button1Click(Sender: TObject); 
    var 
      SystemTime: TSystemTime; 
      NewTime, NewDate: string; 
    begin 
      NewTime := '13:58:00'; 
      NewDate := '02.02.2001'; // or '02/02/01' 
      DateTimeToSystemTime(StrToDate(NewDate) + StrToTime(NewTime), SystemTime); 
      SetLocalTime(SystemTime); 
      // Tell windows, that the Time changed! 
      PostMessage(HWND_BROADCAST, WM_TIMECHANGE, 0, 0); // * 
    end; { 
     Windows 2000 and later: An application should not broadcast 
     the WM_TIMECHANGE message because the system will broadcast 
     this message when the application changes the system time. 
    } {************************************************************} {3.} function SetSystemTime(DateTime: TDateTime): Boolean; 
    { (c) by UNDO } 
    var 
      tSetDati: TDateTime; 
      vDatiBias: Variant; 
      tTZI: TTimeZoneInformation; 
      tST: TSystemTime; 
    begin 
      GetTimeZoneInformation(tTZI); 
      vDatiBias := tTZI.Bias / 1440; 
      tSetDati := DateTime + vDatiBias; 
      with tST do 
      begin 
        wYear := StrToInt(FormatDateTime('yyyy', tSetDati)); 
        wMonth := StrToInt(FormatDateTime('mm', tSetDati)); 
        wDay := StrToInt(FormatDateTime('dd', tSetDati)); 
        wHour := StrToInt(FormatDateTime('hh', tSetDati)); 
        wMinute := StrToInt(FormatDateTime('nn', tSetDati)); 
        wSecond := StrToInt(FormatDateTime('ss', tSetDati)); 
        wMilliseconds := 0; 
      end; 
      Result := Windows.SetSystemTime(tST); 
    end; 
      

  2.   

    先谢了,要定义有关的DLL吗?如何定义?