hola amigos
alguien conoce un código para evitar que el computador se bloquee por inactividad, no soy administrador del equipo para modificar esta opción, así que creo necesitar algo que emule click o pulsaciones de letras para evitar que se bloquee el equipo, alguna idea?
gracias
¿Qué sistema operativo tienes? Porqué en la mayoría puedes modificar el tiempo que tarda en cerrarse por inactividad y configurarlo en nunca. Y si no es el sistema operativo lo que te lo apaga, puedes mirar en la BIOS.
Pero si no se me ocurre que puedes crear un bucle infinito tipo:
static void Main()
{
while (true)
{
Console.WriteLine("Ejecutando bucle infinito");
}
}
[NOTA DEL MODERADOR] Usa las etiquetas GeShi para insertar código. Lee las reglas del subforo.
Hola amigo gracias por contestar, es un sin 7, uso un usuario de red para iniciar sesión así que no puedo modificar la configuración del pc porque tiene seguridad, puedes explicarme lo den bucle infinito ?
Recurriendo a la APi de Windows, la función
SetThreadExecutionState, supuestamente es capaz de evitar que el sistema entre en un estado IDLE (inactividad). Esta función afecta por thread o hilo.
- SetThreadExecutionState function - MSDN (http://msdn.microsoft.com/en-us/library/aa373208%28VS.85%29.aspx)
Cita de: MSDNEnables an application to inform the system that it is in use, thereby preventing the system from entering sleep or turning off the display while the application is running.
Nótese que dicha función, usándola periodicamente (mediante un "temporizador" por ejemplo) y pasándole los valores adecuados (
ES_CONTINUE + ES_SYSTEM_REQUIRED + ES_AWAY_MODE_REQUIRED) simulará que el PC está en estado de sueño (Sleep). Si también quieres prevenir que la pantalla se apague, usa el valor o flag
ES_DISPLAY_REQUIRED.
Otra alternativa, en caso de que esa metodología no te funcionase por el motio que fuese, sería utilizar la función Win32
SendMessage para enviar el mensaje de ventana
WM_POWERBROADCAST junto al prámetro (WParam)
PBT_APMQUERYSUSPEND ,
pero esto requeriría desarrollar otro wrapper para dicha función. En caso de que
SetThreadExecutionState no te funcione me pondré con la otra función de la WinAPI.
Cuéntanos los resultados obtenidos.
Código fuente, desarrollado en el lenguaje
Visual Basic.Net:
(http://i.imgur.com/8yLylHO.png) (https://github.com/ElektroStudios/VBNetSnippets/blob/master/System/Power%20Util.vb)
Ejemplo de uso:
( Lo he testeado en Windows 7 x64, funciona perfectamente. )
Public Class Form1 : Inherits Form
Private WithEvents awakeTimer As Threading.Timer
Private ReadOnly awakeInterval As Integer = 30000 'ms
Public Sub New()
Me.InitializeComponent()
Me.awakeTimer = New Threading.Timer(AddressOf Me.AwakeTimer_Callback, Nothing, Me.awakeInterval, 0)
End Sub
Private Sub AwakeTimer_Callback(ByVal stateInfo As Object)
' Send periodically an Awake signal to avoid the system turning off the display and entering into Sleep or Hibernation mode.
PowerUtil.SendAwakeSignal()
Me.awakeTimer.Change(Me.awakeInterval, 0)
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) _
Handles MyBase.FormClosing
Me.awakeTimer.Dispose()
PowerUtil.RemovedAwakeSignal()
End Sub
End Class
Saludos
Cita de: binario010101 en 5 Noviembre 2015, 02:54 AM
Hola amigo gracias por contestar, es un sin 7, uso un usuario de red para iniciar sesión así que no puedo modificar la configuración del pc porque tiene seguridad, puedes explicarme lo den bucle infinito ?
Básicamente es crear un programa cuya única función sea ejecutar un bucle infinito, de esta manera el equipo no está inactivo al mantener funcionando el bucle y no se apaga. El código que te puse está en C#, para una aplicación de consola. Entero sería algo así:
using System;
namespace BucleInfinito
{
static void Main()
{
while (true)
{
Console.WriteLine("Ejecutando bucle infinito");
}
}
}
Cita de: CR0N0S en 5 Noviembre 2015, 14:59 PMBásicamente es crear un programa cuya única función sea ejecutar un bucle infinito, de esta manera el equipo no está inactivo al mantener funcionando el bucle y no se apaga. El código que te puse está en C#, para una aplicación de consola. Entero sería algo así:
Pensar así es una equivocación, el código que has mostrado no funcionará, por que el trabajo que haga una aplicación no es lo mismo que lo que el sistema considera por "estar trabajando", donde se requiere una interacción por parte del usuario.
Con un búcle infinito no conseguirás nada, a menos que asignes una señal de actividad al thread donde estás ejecutando ese búcle (o cualquier otra operación) para mantener el sistema despierto, con la función de la API que mencioné en el post de arriba.
Ten en cuenta que decenas de servicios y aplicaciones de Windows, y aplicaciones de terceros que mantengas en ejecución, están siempre en segundo plano, trabajando, pero aun así el sistema se pone en estado de inactividad, ¿verdad?.
Aparte de eso, hay una cosa muy importante a tener en cuenta en el código que has mostrado, y es que el bucle infinito consumira CPU hasta tal punto que pondrá al PC en un estado de estrés al realizar un trabajo tan intensivo o repetitivo, el cual no es necesario, ya que teniendo en cuenta que el tiempo mínimo para que se ponga el sistema en estado Sleep es de 1 minuto, entonces deberías detener el thread por unos 50 segundos en cada iteración del búcle para dejar descansar al PC y no consumir tantos recursos del sistema:
While True
Console.WriteLine("Ejecutando bucle infinito")
Threading.Thread.Sleep(50 * 1000)
End While
De todas formas, como ya digo esa metodología del búcle infinito es inservible para tal fin, pero lo comento para evitar malos hábitos de programación en el sentido que acabo de explicar.
EDITO: Tal vez podrías probar a utilizar un búcle infinito donde simulases una pulsación de teclado o keystroke, con el método
System.Windows.Forms.SendKeys.Send, pero de igual modo no creo que esto funcionase para tal fin. (no lo he comprobado)
Saludos!
Hola binario mejor no te enredes programando lo que tu buscas se llama automatizador y aqui esta uno llamado tinytask:
(http://www.vtaskstudio.com/images/tinytask_vis.png)
es el que yo uso repite todo lo que escribas, clic y movimientos del mause
descarga lo aqui desde su web:http://www.vtaskstudio.com/support.php (http://www.vtaskstudio.com/support.php)
Saludos Flamer y es gratuito
Instalar programas no es opción por la seguridad del pc, creo que solo debe ser algo en vbs, bat o una macro en excel. Estoy intentado dejar una tarea programada desde imacros forma chre pero no funciona. Gracias