elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Evento logout windows sin ventana
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Evento logout windows sin ventana  (Leído 3,317 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Evento logout windows sin ventana
« en: 17 Junio 2014, 23:01 pm »

Hola hice un programa que me diga cuanto tiempo he estado sin encender el pc. Funciona pero creo que no es la mejor forma de hacer se. Por ejemplo tengo esto:

Código
  1. while(1){
  2. Sleep(1000*60);
  3. refreshTime();
  4. }
  5. void refreshTime(){
  6. HKEY clave;
  7. RegOpenKey(HKEY_CURRENT_USER,"Software\\first logout",&clave);
  8. time_t c_time=time(0);
  9. char save[256];
  10. _itoa_s(c_time,save,10);
  11. int size=sizeof(save);
  12. RegSetValueEx(clave,"time",0,REG_SZ,(BYTE *)&save,sizeof(save));
  13. }

Cambia el ultimo tiempo con el pc encendido cada 1m. Lo hago asi porque no se como hacer el evento de windows shutdown. Ya se que se envía a la cola de mensajes pero si no tengo ventana no tengo cola y no se crear la.

Luego al mostrar un messagebox con el tiempo preparo un string y le agrego el tiempo de una forma por lo menos a mi me parece rara. El resto del código:

Código
  1. int WINAPI WinMain(HINSTANCE instance,HINSTANCE,LPSTR,int){
  2. HKEY clave;
  3. RegCreateKey(HKEY_CURRENT_USER,"Software\\first logout",&clave);
  4. int result;
  5. char *test=0;
  6. if(RegGetValue(clave,"","created",RRF_RT_ANY,0,test,0)!=ERROR_SUCCESS){
  7. //First load
  8. char dir[MAX_PATH];
  9. GetWindowsDirectory(dir,sizeof(dir));
  10. HMODULE handle = GetModuleHandle(0);
  11. TCHAR fileName[256];
  12. GetModuleFileName(handle,fileName,sizeof(fileName));
  13. strcat_s(dir,"\\System32\\first_logout.exe");
  14. Wow64DisableWow64FsRedirection(0);
  15. CopyFile(fileName,dir,0);
  16. RegSetValueEx(clave,"created",0,REG_SZ,(BYTE *)"1",sizeof(dir));
  17.  
  18. RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&clave);
  19. RegSetValueEx(clave,"first logout",0,REG_SZ,(LPBYTE)dir,sizeof(dir));
  20. Wow64EnableWow64FsRedirection(0);
  21. refreshTime();
  22. }else{
  23. BYTE save[512];
  24. time_t t=0;
  25. DWORD size;
  26. int result2=RegQueryValueEx(clave,"time",0,0,save,&size);
  27. t=atoi((char*)save);
  28. time_t st=difftime(time(0),t);
  29. tm rt;
  30. gmtime_s(&rt,&st);
  31. string result;
  32. char add[256];
  33.  
  34. result.append("horas: ");
  35. _itoa_s(rt.tm_hour,add,10);
  36. result.append(add);
  37. result.append(" || minutos: ");
  38. _itoa_s(rt.tm_min,add,10);
  39. result.append(add);
  40. result.append(" || secundos: ");
  41. _itoa_s(rt.tm_sec,add,10);
  42. result.append(add);
  43. MessageBox(0,result.c_str(),"The time after first logout",MB_ICONINFORMATION);
  44.  
  45. }
  46. while(1){
  47. Sleep(1000*60);
  48. refreshTime();
  49. }
  50. }


Me podéis dar algunos consejos de como lo podría mejorar ?

Gracias


En línea

daryo


Desconectado Desconectado

Mensajes: 1.071



Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #1 en: 18 Junio 2014, 01:20 am »

aca hay un tuto de creacion de ventanas en windows
http://www.portalhacker.net/b18/tutorial-uso-apis-windows-para-crear-entorno-grafico/100744/


« Última modificación: 18 Junio 2014, 01:23 am por daryo » En línea

buenas
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #2 en: 18 Junio 2014, 10:45 am »

Yo se como crear una ventana en windows y luego anadir la cola de mensajes pero quiero tener la cola de mensajes sin la ventana porque quiero detectar cuando se va cerrar el windows.
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.788


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #3 en: 18 Junio 2014, 10:55 am »

Busca SetConsoleCtrlHandler en la MSDN.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Evento logout windows sin ventana
« Respuesta #4 en: 18 Junio 2014, 10:58 am »

Y no es más sencillo leer la fecha y hora en la que se ha apagado el equipo??

HKLM\System\CurrentControlSet\Control\Windows -> ShutdownTime

La clave está en formato FILETIME. Puedes convertirlo a formato time_t con una función tal que:

Código
  1. time_t filetimeToTimet(FILETIME *ft)
  2. {
  3.  ULARGE_INTEGER ull;
  4.  ull.LowPart = ft->dwLowDateTime;
  5.  ull.HighPart = ft->dwHighDateTime;
  6.  return ull.QuadPart / 10000000ULL - 11644473600ULL;
  7. }
En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #5 en: 18 Junio 2014, 13:22 pm »

eferion no sabia que windows guarda el tiempo. Lo he encontrado en el registro pero no entiendo tu funciona de convertir el FILETIME. Me la puedes explicar ?

Y una cosa mas, si el pc se apaga inesperadamente por ejemplo si se queda sin corriente windows lo guarda correctamente?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Evento logout windows sin ventana
« Respuesta #6 en: 18 Junio 2014, 13:56 pm »

eferion no sabia que windows guarda el tiempo. Lo he encontrado en el registro pero no entiendo tu funciona de convertir el FILETIME. Me la puedes explicar ?

¿No lo entiendes o no funciona?

Si la opción buena es que no entiendes el código, tienes que saber que:

  • FILETIME indica el tiempo que ha pasado desde el 1 de Enero de 1601 en intervalos de 100 nanosegundos.
  • time_t indica el tiempo que ha pasado desde el 1 de Enero de 1970 en intervalos de 1 segundo.

Lo que hace al función es realizar la conversión entre estas dos escalas de tiempo (se asume que la fecha de apagado que va a figurar en el registro no es anterior a 1970 ;))

Y una cosa mas, si el pc se apaga inesperadamente por ejemplo si se queda sin corriente windows lo guarda correctamente?

Si se va la corriente no hay sistema sin batería que te vaya a registrar la hora exacta en la que ésto ha sucedido... y Windows no es una excepción. Lo que sucede es que tener una aplicación residente actualizando un registro en disco para poder saber en qué momento se ha ido la luz es algo cuanto menos extraño.

Este caso, desde mi punto de vista, se debería tratar de otra manera: Le acoplas un SAI al pc, conectas el cable de datos del SAI al pc y lo configuras para que el PC se apague automáticamente cuando el flujo eléctrico falle.
En línea

daryo


Desconectado Desconectado

Mensajes: 1.071



Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #7 en: 18 Junio 2014, 15:00 pm »

Busca SetConsoleCtrlHandler en la MSDN.
http://www.codeproject.com/Articles/2357/Console-Event-Handling
mas claro imposible.

 por cierto es dificil entenderte no te lo tomes a mal pero cuida tu redaccion.

En línea

buenas
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.788


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #8 en: 18 Junio 2014, 15:09 pm »


Es posible, la idea era que buscara informacion (la MSDN es la referencia oficial) una vez que supiera que funcion de la API usar.

por cierto es dificil entenderte no te lo tomes a mal pero cuida tu redaccion.

¿Me estabas hablando a mi? Lo digo por la cita ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
daryo


Desconectado Desconectado

Mensajes: 1.071



Ver Perfil WWW
Re: Evento logout windows sin ventana
« Respuesta #9 en: 18 Junio 2014, 15:12 pm »

¿Me estabas hablando a mi? Lo digo por la cita ...
no a  patilanz
En línea

buenas
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
CSRF en el Logout de Tuenti « 1 2 3 4 »
Nivel Web
dimitrix 34 15,363 Último mensaje 2 Mayo 2009, 19:19 pm
por Jubjub
Registro login/logout
Seguridad
mazu 5 4,231 Último mensaje 28 Agosto 2010, 17:02 pm
por Novlucker
Facebook añade una función de seguridad para olvidadizos: el 'logout' remoto
Noticias
wolfbcn 0 1,115 Último mensaje 12 Septiembre 2010, 22:15 pm
por wolfbcn
Como Hacer boton Logout?
PHP
dgg006 2 6,828 Último mensaje 5 Junio 2011, 09:22 am
por Cicklow
problema para agregar evento "KeyPressed" en una ventana swing java
Java
p4nd4criss 2 5,408 Último mensaje 4 Junio 2012, 02:29 am
por p4nd4criss
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines