반응형
* 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# Programming' 카테고리의 다른 글
[C#] 숫자 (금액) 을 한글로 변환 (1) | 2020.01.13 |
---|---|
[C#] IP Ping Check (0) | 2020.01.11 |
[C#] 프로젝트 리소스 (Resources) 에 추가된 이미지 불러오기 (0) | 2020.01.01 |
[C#] 컨트롤 이름으로 찾아서 컨트롤 배열 처럼 사용 하기 (0) | 2019.12.30 |
[C#] 시간 체크 (Time Check) (0) | 2019.12.27 |