반응형
* VBNET API PC (종료, 재시작) 또는 Diagnostics.Process 이용 PC 종료 예제...
전체 소스 코드
Form1.vb
Imports System.Runtime.InteropServices
Public Class Form1
Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, _
ByVal lpMessage As String, _
ByVal dwTimeout As Integer, _
ByVal bForceAppsClosed As Integer, _
ByVal bRebootAfterShutdown As Integer) As Integer
'1: 종료 전 사용자에게 알릴 메시지 , 2:종료 전 사용자에게 알릴 메시지, 3:종료까지 대기 시간, 4:프로그램 강제 종료 여부(False -> 강제 종료), 5:시스템 종료 후 다시 시작 여부(true -> 다시 시작)
Dim bClick As Boolean = False
Dim dtClick As DateTime
Dim bThread As Boolean = True
Dim thMain As System.Threading.Thread
Dim bCheck As Boolean = False
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'크로스 스레드 오류 방지
CheckForIllegalCrossThreadCalls = False
thMain = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf Thread_Tick))
'1. 첫번째 방법 : 스레드
thMain.IsBackground = True
thMain.Start()
'2 두번째 방법
'10초 뒤 종료
'System.Diagnostics.Process.Start("shutdown", "/s /f /t 10")
'label2.Text = "10"
End Sub
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
dtClick = DateTime.Now
bClick = True
End Sub
Private Function After_Time(ByVal dtNow As DateTime, ByVal dtBefore As DateTime) As Double
Dim ts As TimeSpan = dtNow - dtBefore
Return ts.TotalSeconds
End Function
Private Sub Thread_Tick()
While (bThread)
If bClick Then
label2.Text = String.Format("{0:##0}", After_Time(DateTime.Now, dtClick))
'5초 뒤에 PC 재시작
'마지막인자 True 이면 재시작 False 이면 종료
If After_Time(Date.Now, dtClick) >= 5 And Not bCheck Then
InitiateSystemShutdown("\\127.0.0.1", Nothing, 0, False, True)
bCheck = True
End If
End If
System.Threading.Thread.Sleep(100)
End While
End Sub
Private Sub Form1_FontChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FontChanged
'스레드 변수가 nothing 이 아니면
If Not thMain Is Nothing Then
'스레드가 돌아가고 있으면.
If thMain.IsAlive Then
'스레드 강제 종료
thMain.Abort()
End If
End If
End Sub
End Class
* 두번째 방법으로는 아래와 같이 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/6
반응형
'VB.NET Programming' 카테고리의 다른 글
[VBNET] IP Ping Check (0) | 2020.01.10 |
---|---|
[VBNET] 구조체 를 바이트 배열로 또는 바이트 배열을 구조체로 변환 (0) | 2020.01.09 |
[VBNET] 프로젝트 리소스 (Resources) 에 추가된 이미지 불러오기 (0) | 2020.01.02 |
[VBNET] PC 비프음 (Beep) (0) | 2019.12.25 |
[VBNET] [API] 윈도우 창 찾기 (Window Form Search) (0) | 2019.12.24 |