2009-05-05 4 views
1

мое приложение, работающее на C#, с использованием стороннего framework.it работает как пользовательский интерфейс для многих вопросов application.my, когда мое приложение запущено и система не должна выполняться в режиме ожидания/hybernate OS. так или иначе я должен отменить мероприятие для ожидания/hybernate, поднятого OS.please, кто-нибудь помог мне в этом отношении.Как отменить режим ожидания и спящий режим?

Благодаря ВС

+0

Я настоятельно рекомендую вам вручную установить параметры питания. У нас были люди, которые потеряли данные, а на следующий день не было компьютера, когда приложение внезапно подумало, что его жизнь так важна, что в течение ночи он полностью разрядил батарею. Если есть хоть малейшая вероятность, что кто-то забудет/проигнорирует закрытие приложения, очень важно, чтобы вы не возвращали услугу, предоставляя компьютер бесполезно. –

ответ

1

Там нет никакого способа, чтобы отменить событие внутри .NET. Вам нужно будет сделать это с помощью P/Invoke и Win32 API, обработав WM_POWERBROADCAST и вернув BROADCAST_QUERY_DENY. Взгляните на this CodeGuru page для толчка в правильном направлении.

Также будет интересен this page, в котором подробно описаны некоторые события, которые запускаются в .NET, когда пользователь выходит из системы или приостанавливает/спящий режим.

+0

привет ЖХ я пользователь по follwing кода защищены переопределения недействительного WndProc (ссылка System.Windows.Forms.Message м) .... m.Result = новый IntPtr ((INT) WindowMessage.BROADCAST_QUERY_DENY); .... возвращения Это работает, когда я использую код вторичного окна (в моем приложении вторичным является окно, которые являются C# Windows) первичных окна создаются мои, используя данные полученные от бэкэнда application.i есть использовать этот метод в отдельной части окна. Мне нужно использовать в файле, где метод «wndproc» не был удален. любая идея спасибо Sun – 2009-05-05 09:19:07

+0

Я не уверен, что я на 100% слежу за вами с помощью первичных и дополнительных окон, но любое «окно» (Windows.Forms.Form) должно иметь цикл сообщений и, следовательно, обратный вызов WndProc. Поместите код в любой форме, у вас есть Application.Run() 'ed. Все остальное не удается, вы можете сделать небольшую скрытую форму, которая сидит там и слушает это сообщение. –

+0

Привет спасибо за ур ответить я поставлю его короткое окна будут нарисованы внутри рамки означает, что рамки начнут сначала, мы не будем контролировать рамки. рамки имеют меню, содержит имя приложения, нажмите на любое paricular menu соответствующее приложение отправит данные, чтобы нарисовать окна, говорит, что все детали неясны, чтобы нарисовать окна. Теперь начинаем нашу работу, анализируем детали и рисуем окно внутри фреймворк. – 2009-05-05 11:07:26

4

В этом blog post описано, как предотвратить переключение компьютера с помощью SetThreadExecutionState. Код выглядит следующим образом:

public partial class Window1 : Window 
{ 
    private uint m_previousExecutionState; 

    public Window1() 
    { 
     InitializeComponent(); 

     // Set new state to prevent system sleep (note: still allows screen saver) 
     m_previousExecutionState = NativeMethods.SetThreadExecutionState(
      NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED); 
     if (0 == m_previousExecutionState) 
     { 
      MessageBox.Show("Call to SetThreadExecutionState failed unexpectedly.", 
       Title, MessageBoxButton.OK, MessageBoxImage.Error); 
      // No way to recover; fail gracefully 
      Close(); 
     } 
    } 

    protected override void OnClosed(System.EventArgs e) 
    { 
     base.OnClosed(e); 

     // Restore previous state 
     if (0 == NativeMethods.SetThreadExecutionState(m_previousExecutionState)) 
     { 
      // No way to recover; already exiting 
     } 
    } 
} 

internal static class NativeMethods 
{ 
    // Import SetThreadExecutionState Win32 API and necessary flags 
    [DllImport("kernel32.dll")] 
    public static extern uint SetThreadExecutionState(uint esFlags); 
    public const uint ES_CONTINUOUS = 0x80000000; 
    public const uint ES_SYSTEM_REQUIRED = 0x00000001; 
} 

Если вам нравится приложение, описанное в посте, есть обновленная версия here.

0

Powercfg и shutdown (особенно shutdown /a, чтобы прервать выключение системы) может оказаться полезным, возможно.