2010-10-31 22 views
9

Có bất kỳ API Win32 nào để đánh thức một hệ thống đã bị tắt, tại một thời điểm cụ thể không? Tôi đã thấy một chương trình có tên Autopower On có khả năng cấp nguồn cho hệ thống vào một thời điểm xác định.C#: Làm thế nào để đánh thức hệ thống đã bị tắt?

+3

Khi nào bạn sẽ chạy chương trình C# này? Trong khi máy tính tắt? Hoặc trước khi nó bị tắt? – Gabe

+0

tôi chạy chương trình này trước khi chương trình bị tắt. – vishnu

+0

Bạn cần đào sâu vào ACPI. Một chút googling nói rằng bạn có thể truy cập này với WMI, nhưng tôi không chắc chắn đến mức độ nào. – Brad

Trả lời

11

Got the below post từ một trang web. Bất kỳ cơ thể đã cố gắng này?

Không có gì trong khuôn khổ, do đó bạn sẽ phải "PInvoke" một chút. API bạn cần gọi là CreateWaitableTimer và SetWaitableTimer. Sau đây là mẫu hoàn chỉnh (Q & D) minh họa cách bạn có thể thiết lập hệ thống để được đánh thức từ chế độ ngủ/ngủ đông sử dụng API trên của Win32. Lưu ý rằng ở đây tôi thiết lập thời gian đánh thức tương đối là 300000000 nSecs. Điều đó có nghĩa là máy tính sẽ thức dậy (giả sử anh ta ngủ hoặc ngủ đông) trong vòng 30 giây sau khi đặt hẹn giờ. Tham khảo tài liệu MSDN để biết chi tiết về SetWaitableTimer và các đối số của nó.

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"); 
     } 
    } 
} 
+4

Tôi đã chỉnh sửa chương trình để nó hoạt động. Tôi đã xác minh rằng nó đánh thức máy tính của tôi từ ngủ và ngủ đông. Tôi không mong đợi nó thức dậy từ bị tắt máy, tuy nhiên. – Gabe

+0

@Gabe: ok. cảm ơn bạn đã chỉnh sửa – vishnu

+0

Tôi đã thử mã này trên máy tính để bàn và máy tính bảng Windows 8 nhưng nó không hoạt động. Liệu nó có phải làm điều gì đó với thiết bị của tôi hỗ trợ tính năng này hay tất cả các thiết bị sẽ hỗ trợ tùy chọn đánh thức?Tôi đã xem xét tùy chọn Cho phép tính giờ thức sau tùy chọn ngủ trong cài đặt nguồn nâng cao nhưng thay đổi quá trên máy tính để bàn và máy tính bảng có tùy chọn ở tất cả –

2

dự án bài Wake on LAN (WOL) Mã này có thể được sử dụng (Cả hai bo mạch chủ và NIC phải hỗ trợ WOL)

2

Khi bạn tắt máy tính (không ngủ hoặc ngủ đông), bạn không thể đánh thức nó trực tiếp từ mã C#, C++. Sau khi tất cả các hệ điều hành chính nó được đóng lại.

Cơ hội duy nhất cho bo mạch chủ của bạn hỗ trợ một số loại cơ chế hẹn giờ. Và với một số chức năng C++ để có thể viết một số cờ vào BIOS và đặt bộ hẹn giờ đó.

-1

Sử dụng trình đơn "Tác vụ theo lịch" của cửa sổ. Xem:

http://www.howtogeek.com/119028/how-to-make-your-pc-wake-from-sleep-automatically/

Bạn tạo một chương trình mà bạn muốn chạy khi thức dậy và sau đó tự nhập nó vào trong cửa sổ dự kiến ​​danh sách công việc lần đầu tiên để đánh thức sau một thời gian cụ thể.

Khi bạn lập trình đánh thức, tôi không chắc chắn liệu bạn có cần chương trình gọi API Windows là không, nếu bạn muốn chương trình tắt nguồn PC sau khi bắt đầu một nhiệm vụ khác để đánh thức nó lần nữa. Cần phải reserach những gì các API cửa sổ có cho việc này.

+1

Đây là câu trả lời phi lập trình phù hợp với SuperUser. Tuy nhiên, nó không trả lời câu hỏi lập trình được yêu cầu, cấu hình việc đánh thức từ C#. –

Các vấn đề liên quan