반응형

* C# API 를 이용 PC 종료 시키기 예제...

 

메인화면

전체 소스코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;


namespace CSharp_PCExit
{
    public partial class Form1 : Form
    {

        [DllImport("advapi32.dll")]
        public static extern void InitiateSystemShutdown(string lpMachineName,        //컴퓨터 이름 \\\\127.0.0.1
                                                         string lpMessage,            //종료 전 사용자에게 알릴 메시지
                                                         int dwTimeout,               //종료까지 대기 시간
                                                         bool bForceAppsClosed,       //프로그램 강제 종료 여부(False -> 강제 종료)
                                                         bool bRebootAfterShutdown);  //시스템 종료 후 다시 시작 여부(true -> 다시 시작)



        bool bClick = false;
        DateTime dtClick;

        bool bThread = true;
        System.Threading.Thread thMain;

        bool bCheck = false;

        public Form1()
        {
            InitializeComponent();

            //크로스 스레드 오류 방지
            CheckForIllegalCrossThreadCalls = false;

            thMain = new System.Threading.Thread(new System.Threading.ThreadStart(Thread_Tick));

            //1. 첫번째 방법 : 스레드
            thMain.IsBackground = true;
            thMain.Start();

            //2 두번째 방법
            //10초 뒤 종료
            //System.Diagnostics.Process.Start("shutdown", "/s /f /t 10");
            //label2.Text = "10";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            dtClick = DateTime.Now;
            bClick = true;
        }

        private double After_Time(DateTime dtNow, DateTime dtBefore)
        {
            TimeSpan ts = dtNow - dtBefore;
            return ts.TotalSeconds;
        }

        //스레드 이벤트...
        void Thread_Tick()
        {
            while (bThread)
            {
                if (bClick)
                {
                    label2.Text = string.Format("{0:##0}", After_Time(DateTime.Now, dtClick));

                    if (After_Time(DateTime.Now, dtClick) >= 5 && !bCheck)
                    {
                        InitiateSystemShutdown("\\\\127.0.0.1" , null, 0, false, false );
                        bCheck = true;
                    }

                }


                System.Threading.Thread.Sleep(100);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (thMain != null)
            {
                if (thMain.IsAlive)
                {
                    thMain.Abort();
                }
                thMain = null;
            }
        }

    }
}

 

위 그림에서 보듯이 5초 후 PC 가 종료 되게끔 구현이 되어 있습니다. 5초는 임의로 정한 숫자일 뿐이고

나중에 사용자가 설정을 할 수 있게 하게 되면 얼마든지 시간 설정하여 자유롭게 PC 종료 하는 프로그램을

만들 수 있습니다. 

 

* 두번째 방법으로는 아래와 같이 Diagnostics.Process 를 이용 PC 종료 예제 입니다.

/*
피시 강제 종료
System.Diagnostics.Process.Start("shutdown.exe", "-s -f /t 60");      //-t 초 즉 60초 뒤에 PC 종료...
피시 종료 카운트다운 때 아래 명령을 날리면 종료가 취소됨
System.Diagnostics.Process.Start("shutdown.exe", "-a");
피시 재시작
System.Diagnostics.Process.Start("shutdown.exe", "-r");
피시 로그오프
System.Diagnostics.Process.Start("shutdown.exe", "-l");
 
*/

 

 

*예제 결과

 

 

 

https://kdsoft-zeros.tistory.com/111

 

[C#] 시간 체크 (Time Check)

* C# 시간 체크 (Time Check) 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts