Y a-t-il une API Win32 pour se réveiller un système qui a été arrêté, à une heure précise? J'ai vu un programme appelé AutoPower sur lequel est capable d'alimenter le système à une heure spécifiée. P>
4 Réponses :
Ce réveil sur LAN (WOL) Code Post Post pourrait être utile (La carte mère et la carte réseau doivent soutenir WOL) P>
obtenu le message ci-dessous à partir d'un site. Tout corps a essayé cela?
Rien dans le cadre, vous devrez donc "pinvoke" un peu. L'API selon laquelle vous devez appeler est CreatewaITableTimer et SetwaibleBeTimer. Voici un échantillon complet (Q & D) qui illustre comment vous pouvez définir un Le système doit être réveillé de sommeil / hibernate en utilisant ci-dessus Win32 API's. Notez que vous établissez ici une durée de réveil relative de 300000000 NSEC. Cela signifie que l'ordinateur se réveillera (supposant qu'il dort ou hibernation) dans les 30 secondes suivant la réglage de la minuterie. Consultez les documents MSDN pour plus de détails sur SETWAITABLETIMER et ses arguments. P>
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Willys { class Program { [DllImport("kernel32.dll")] public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName); [DllImport("kernel32.dll")] public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume); [DllImport("kernel32", SetLastError = true, ExactSpelling = true)] public static extern Int32 WaitForSingleObject(IntPtr handle, uint milliseconds); static void Main() { SetWaitForWakeUpTime(); } static IntPtr handle; static void SetWaitForWakeUpTime() { long duetime = -300000000; // negative value, so a RELATIVE due time Console.WriteLine("{0:x}", duetime); handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer"); SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true); uint INFINITE = 0xFFFFFFFF; int ret = WaitForSingleObject(handle, INFINITE); MessageBox.Show("Wake up call"); } } }
J'ai édité le programme afin que cela fonctionne. J'ai vérifié qu'il réveille mon ordinateur du sommeil et de l'hibernation. Je ne m'attends pas à ce qu'il se réveille d'être arrêté, cependant.
J'ai essayé ce code sur Windows 8 Desktop et tablette, mais cela ne fonctionne pas. Cela doit-il faire quelque chose avec mon appareil prenant en charge cette fonctionnalité ou tous les périphériques prendraient en charge l'option de réveil? J'écris l'option Autoriser la minuterie de réveil sous l'option Dormeur dans les réglages d'alimentation avancés, mais changeez-le aussi sur le travail de bureau et la tablette de tablette ont l'option du tout.
Sur ce site, vous avez également eu des mises en garde pour vous assurer de ne pas nécessiter de mot de passe pour le réveiller / sur Wake, ainsi que dans les paramètres de sommeil, pour permettre aux minuteries de réveil.
Une fois que vous avez réellement fermé votre ordinateur (ne pas dormir ou hiberner), vous ne pouvez pas le réveiller de C #, C ++ code directement. Après tout, l'OS est fermé. p>
La seule chance serait que votre carte mère favorise une sorte de mécanisme de minuterie. Et avec une fonction C ++ pour pouvoir écrire des drapeaux dans le BIOS et définir cette minuterie. P>
Utilisez le menu Windows "Planifié Task". Voir: P>
Vous créez un programme que vous souhaitez exécuter sur le réveil puis de la saisir manuellement dans la liste des tâches planifiées Windows pour la première fois à réveiller après une heure spécifique. P>
Lorsque vous programmez Awakens, je ne sais pas si vous avez besoin de votre programme pour appeler une API Windows à Arrêtez-vous d'être réveillé à nouveau, Idito Si vous souhaitez que votre programme soit éteint le PC après avoir démarré une autre tâche scédulée pour la réveiller à nouveau. Besoin de reseracher ce que les API Windows sont pour cela. P>
Ceci est une réponse non-programmation qui conviendrait à SuperUserer. Cela ne répond pas à la question de la programmation qui a été posée, cependant, qui nécessite une configuration du réveil de C #.
Quand diriez-vous ce programme C #? Alors que l'ordinateur est éteint? Ou avant qu'il ne soit éteint?
Je gère ce programme avant qu'il ne soit désactivé.
Vous devez creuser dans ACPI. Un peu de googling dit que vous pouvez y accéder avec WMI, mais je ne suis pas sûr de dans quelle mesure.
@Brad: Que dois-je google? Dis-moi des mots-clés à rechercher.
Le programme d'alimentation automatique ( Lifsoft.com ) ne fonctionne pas quand un ordinateur a été arrêté. Cela ne fonctionne que sur les ordinateurs dormant / hibernation.
@Vishnu, je vous ai déjà dit dans mon commentaire ... .NET et ACPI, mais il semble que vous ayez pu comprendre une solution.