Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Cambiar la fecha del systema

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Cambiar la fecha del systema Responder citando

https://cppbuilder.es/viewtopic.php?t=483

Siempre es bueno hacer una búsqueda rápida en el foro.


[editado para corregir el enlace]
Volver arriba
Mensaje    Asunto: Cambiar la fecha del systema Responder citando

Hola a todos

Necesito cambiar la fecha del sistema mediante codigo, lo estaba haciendo así:

SYSTEMTIME tiempo;
....
SetLocalTime(&tiempo);

Funciona bien en Win2K ( al menos cuando el usuario es administrador), pero en Windows98 no se cambia, mirando la ayuda dice que se tiene que ajustar el privileguio usando AdjustTokenPrivilege, pero no se cumo funciona esta APi.
¿Alguie sabe como funciona o algún metodo alternativo para cambiar la fecha del sistema?
Saludos Manolo

Volver arriba
Mensaje    Asunto: Cambiar la fecha del systema Responder citando

Hola _LEO

Le he hechado un vistazo al código, pero no se que pasa que en un windows 98 SE no me deja cambiar la hora y en un Win2K si, ya estoy un poco de los nervios, no se que pasa, por si ayuda de algo lo estoy haciendo así:


SYSTEMTIME tiempo;
AnsiString texto;
HANDLE ProcessHandle, TokenHandle;
LUID tmpLuid;
TOKEN_PRIVILEGES tkp, tkpNew;
DWORD dwBufferNeeded;


DateTimeToSystemTime(Pasar_a_Time(texto),tiempo);
ProcessHandle = GetCurrentProcess();
OpenProcessToken(ProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle);
LookupPrivilegeValue(NULL, SE_SYSTEMTIME_NAME, &tmpLuid);
tkp.PrivilegeCount = 1;
tkp.Privileges->Luid = tmpLuid;
tkp.Privileges->Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TokenHandle, false, &tkp,sizeof(tkpNew), &tkpNew, &dwBufferNeeded);
if(!SetLocalTime(&tiempo)){
Label5->Caption="No se puede poner la hora";
}
else{
Label5->Caption="Hora actualizada";
}

¿Se os ocurre algo?¿Qué me falta?

Saludos Manolo

Volver arriba
Mensaje    Asunto: Cambiar la fecha del systema Responder citando

Hola Manolo:

Lo de "ajustar privilegio" solo es necesario en NT/2000/XP, así que esto a secas debería funcionarte en Win98SE:

  SYSTEMTIME t;
  GetSystemTime(&t);
  // Aquí cambia tu hora
  t.wHour = 21;
  t.wMinute = 0;
  t.wSecond = 0;
  SetSystemTime(&t);

te preguntaras porque uso el GetSystemTime antes del SetSystemTime, y es porque en la estructura SYSTEMTIME va la fecha además de la hora, entonces para que el sistema nos acepte el cambio de hora debemos pasarle una fecha valida.

Según la referencia del API se recomienda usar:

  SendMessage(HWND_TOPMOST, WM_TIMECHANGE, 0, 0);

después de cambiar al hora para informar a otras aplicaciones. Esto no es necesario en Win2000/XP.

Espero que te sirva de algo, ya me contaras.

Saludos:
_Leo

Volver arriba
Mensaje    Asunto: Cambiar la fecha del systema Responder citando

Gracias _Leo

La verdad es que hace poco resolví el problema.

Yo estaba usando SetLocalTime para poner la fecha, pero mirando en la ayuda de Builder decía que esto valdría para Win95 y winNT, no para Win32s ( supongo que aquí incluimos al Win98), así que opté por usar SetSystemTime como me comentas en el ejemplo que me has mandado, así si funciona.
Mi cabezonería con el intento de usar el SetLocalTime era el obviar el bias que usa el systema, ahora habrá que indicarle al usuario que ajuste la franja horaria.

Gracias por todo
Manolo

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.