2009-05-05 3 views
1

C#에서 타사 프레임 워크를 사용하는 내 응용 프로그램이 많은 application.my 질문에 대한 UI로 작동합니다. 응용 프로그램이 실행 중이고 시스템이 대기 모드/하이버네이션 OS 작업을 수행하지 않아야합니다. 어쨌든 나는 대기/hybernate에 대한 이벤트를 취소해야합니다 OS.please 제기에 관해서는 하나의 도움이 내 안부. 일이대기 모드 및 최대 절전 모드를 취소하는 방법은 무엇입니까?

+0

사용자가 수동으로 전원 설정을 지정하도록 적극 권장합니다. 우리는 사람들이 갑자기 데이터의 수명이 매우 중요하다고 생각한 다음날 배터리가 완전히 소모되었을 때 데이터를 잃어 버리고 컴퓨터를 사용하지 못하게했습니다. 누군가가 응용 프로그램을 종료하는 것을 잊어 버리거나 무시할 가능성이 가장 작은 경우라도 컴퓨터를 쓸모 없게 만드는 것으로 부탁하지 않는 것이 중요합니다. –

답변

1

.NET 내에서 이벤트를 취소 할 수있는 방법은 없습니다

감사합니다. WM_POWERBROADCAST을 처리하고 BROADCAST_QUERY_DENY을 반환하면 P/Invoke 및 Win32 API로 처리해야합니다. 올바른 방향으로 밀기 위해 this CodeGuru page을 살펴보십시오.

this page 또한 사용자가 로그 오프하거나 일시 중단/최대 절전 모드로 전환 할 때 .NET에서 발생하는 일부 이벤트에 대해 자세히 설명합니다.

+0

안녕 나는 LC 사용자 follwing을 코드 보호 오버라이드 공극의 WndProc (REF System.Windows.Forms.Message의 m) .... m.Result 새를 IntPtr = ((int)를 WindowMessage.BROADCAST_QUERY_DENY); .... 반환 내가 (C#을 창입니다 창 차 내 애플 리케이션에) 기본 창 내 데이터가이 application.i 백엔드에서 가져온 사용하여 생성을 보조 창에 코드를 사용하는 경우가 작동 창문 부분에이 방법을 사용합니다. 'wndproc'메서드가 alllowed되지 않은 파일에서 사용해야합니다. 어떤 생각이든 감사합니다. 일요일 –

+0

100 % 기본 및 보조 창을 따라갈 수 있을지 모르겠지만 "창"(Windows.Forms.Form)에는 메시지 루프가 있으므로 WndProc 콜백이 있어야합니다. Application.Run()이있는 양식에 코드를 넣으십시오. 그 밖의 모든 방법은 실패합니다. 거기에 앉아서이 메시지를 수신하는 숨겨진 양식을 만들 수 있습니다. –

+0

안녕하십니까 ur 답장을 보내 주셔서 감사합니다 나는 그 프레임을 프레임 워크 내에서 그려지기 때문에 프레임이 프레임 워크에서 처음으로 시작된다는 것을 의미합니다. 프레임 워크는 메뉴를 가지고 있으며 응용 프로그램 이름을 포함합니다 paricular menu 해당 응용 프로그램은 창을 그리기 위해 데이터를 보냅니다. 창을 그리는 데 필요한 모든 정보가 창을 그립니다. 창 작업을 시작하고 세부 사항을 파싱하고 창을 그립니다. 뼈대. –

4

blog postSetThreadExecutionState을 사용하여 PC가 절전 모드로 들어가는 것을 방지하는 방법을 설명합니다. 코드는 다음과 같습니다

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

Powercfgshutdown (특히 shutdown /a은 시스템 종료를 중단하는 데 유용 할 수 있음).