반응형

* 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

 

[VBNET] 시간 체크 함수 (Time Check Func)

Public Function After_Time(ByVal NowTime As Date, ByVal BeforeTime As Date) As Double Dim ts As TimeSpan = NowTime - BeforeTime Return ts.TotalSeconds End Function 반환 되는 값 1 은 1초 이며 0.5 초..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts