2014-10-11 5 views
-5

Windows를 완전히 제어하고 사용자가 Windows를 종료하지 못하도록하는 프로그램을 개발하고 싶습니다. 해결책이 있습니까?프로그래밍 방식으로 Windows가 종료되는 것을 방지 할 수 있습니까?

프로그래밍 언어는 중요하지 않습니다.

+8

전원 케이블이있는 한 Windows를 종료하는 방법이 있습니다. –

+0

예를 들어, 일종의 하드웨어가 필요합니다. 사용자를 죽이고 전원 플러그를 잡아 내지 못하게하는 일종의 자동 무기. –

+0

외에도 그런 소프트웨어는 기꺼이 설치하지 않을 것입니다. –

답변

3

Windows Forms에, C 번호를이 작업을 수행하는 매우 간단한 방법 :

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.FormClosing += Form1_FormClosing; 
} 

void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.WindowsShutDown) 
    { 
     e.Cancel = true; 
    } 
} 

이 종료에서 Windows를 방지 할 수 있습니다, 그리고 당신을 묻는 메시지가 표시됩니다 당신은 어쨌든 종료하거나 취소,이 때문에하려는 경우 응용 프로그램 (윈도우 폼 응용 프로그램) 그 이하는 아마도

참고 : CloseReason Enumeration

또한 코드를 시도 할 수 ... 종료 방지 위의 코드보다 더 효율적인

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.WindowsShutDown) 
    { 
     Process.Start("shutdown", "-a"); 
    } 
} 

참고 : 그냥 그렇게 종료 차단할 수 Windows VistaCancel a Restart or Shutdown

. 그렇게하려고하면 일부 응용 프로그램이 종료를 차단하고 있으며 어쨌든 종료하거나 취소하고 싶다고 묻는 화면이 표시됩니다. 위의 코드는 종료를 차단할 수는 있지만 완전히 차단하지 않아야합니다 하위. 당신도 차단 종료 할 때 표시되는 화면 프롬프트에 메시지를 표시 할 수 있습니다

훨씬 더 나은 솔루션은 다음과 같습니다

public partial class Form1 : Form 
{ 
    [DllImport("user32.dll")] 
    public extern static bool ShutdownBlockReasonCreate(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] string pwszReason); 

    private bool blocked = false; 

    protected override void WndProc(ref Message aMessage) 
    { 
     const int WM_QUERYENDSESSION = 0x0011; 
     const int WM_ENDSESSION = 0x0016; 

     if (blocked && (aMessage.Msg == WM_QUERYENDSESSION || aMessage.Msg == WM_ENDSESSION)) 
      return; 

     base.WndProc(ref aMessage); 
    } 

    void Button1_Click(object sender, FormClosingEventArgs e) 
    { 
     if (ShutdownBlockReasonCreate(this.Handle, "DONT:")) 
     { 
      blocked = true; 
      MessageBox.Show("Shutdown blocking succeeded"); 
     } 
     else 
      MessageBox.Show("Shutdown blocking failed"); 
    } 
} 

참고 : Windows Vista - ShutdownBlockReasonCreate in C#

+1

이것은 실제로 대답이 아닙니다. 당신이 말했듯이, 당신이해야 할 일은 "어쨌든"어쨌든 종료 버튼을 클릭해야 종료를 완료하십시오. 지금까지 사용자가 시스템을 종료하지 못하도록하는 솔루션 인 것처럼 ... 이것은 정말로 하나가 아닙니다. –

+1

Asker가 앱 종료가 아닌 시스템 종료를 차단하려고합니다. –

+0

댓글에서 질문에 이르기까지 앱 종료가 아닌 시스템 종료에 관한 것이라고 생각합니다. 응용 프로그램 종료와 관련이없는 부분을 제거 할 수 있습니까? –

3

실행 gpedit.msc 컴퓨터 구성 Windows 설정 보안 설정 로컬 정책 사용자 권한 할당 시스템 종료 이 그룹 정책의 사용자 또는 그룹을 원하는 언어로 선택하십시오. 아마도 도움이 될 것입니다 : Group Policy Settings Reference for Windows and Windows Server.

관련 문제