指定コンピュータのシャットダウン・中止          <TOP>


指定したコンピュータをシャットダウンおよびその処理を中止します。

InitiateSystemShutdown 指定されたコンピュータのシャットダウン処理、または再起動を設定

AbortSystemShutdown InitiateSystemShutdown関数が開始したシステムのシャットダウン処理を中止

 

TimeLeftで指定された時間カウントダウン表示、シャットダウン処理されます。

チェックボックスにて「再起動」「安全に電源を切ることができる」を選択できます。

  

\\Hitachi(例ではWindows2000)側では図のウィンドウが表示されます。

 

'================================================================
'= 指定コンピュータのシャットダウン・中止
'=    (InitiateSystemShutdown.bas)
'================================================================
#include "Windows.bi"

' 指定されたコンピュータのシャットダウン処理、または再起動を設定
Declare Function Api_InitiateSystemShutdown& Lib "advapi32" Alias "InitiateSystemShutdownA" (ByVal lpMachineName$, ByVal lpMessage$, ByVal dwTimeout&, ByVal bForceAppsClosed&, ByVal bRebootAfterShutdown&)

' InitiateSystemShutdown関数が開始したシステムのシャットダウン処理を中止
Declare Function Api_AbortSystemShutdown& Lib "advapi32" Alias "AbortSystemShutdownA" (ByVal lpMachineName$)

Var Shared Edit(2) As Object
Var Shared Button1 As Object
Var Shared Button2 As Object
Var Shared Check1 As Object
Var Shared Timer1 As Object

For i = 0 To 2
    Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1)))
    Edit(i).SetFontSize 14
Next
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14
Check1.Attach GetDlgItem("Check1") : Check1.SetFontSize 14
Timer1.Attach GetDlgItem("Timer1")

Var Shared TimeLeft As Long        '残り時間

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Edit(0).SetWindowText "\\Hitachi"
    Edit(1).SetWindowText "APIデモ:シャットダウンMSG"
    Edit(2).SetWindowText "30"

    Check1.SetWindowText "「安全に電源を切ることができる」"

    Button2.EnableWindow 0
    Timer1.SetInterval 100
    Timer1.Enable 0
End Sub

'================================================================
'= シャットダウン
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var fg As Integer
    Var Ret As Long

    fg = Check1.GetCheck
    Ret = Api_InitiateSystemShutdown(Edit(0).GetWindowText, Edit(1).GetWindowText, val(Edit(2).GetWindowText), True, fg)

    If Ret = 0 Then
        A% = MessageBox(GetWindowText, "失敗しました!", 0, 2)
    Else
        Button1.EnableWindow 0
        Button2.EnableWindow -1
        Timer1.Enable -1
        TimeLeft = Val(Edit(2).GetWindowText)
    End If
End Sub

'================================================================
'= シャットダウンキャンセル
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long

    Ret = Api_AbortSystemShutdown(Edit(0).GetWindowText)

    If Ret = 0 Then
        A% = MessageBox(GetWindowText, "失敗しました!", 0, 2)
    Else
        SetWindowText "キャンセルしました!"
        Button1.EnableWindow -1
        Button2.EnableWindow 0
        Timer1.Enable 0
        Wait 200
        SetWindowText "InitiateSystemShutdown"
    End If
End Sub

'================================================================
'= カウント
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    SetWindowText "シャットダウン[" & Edit(0).GetWindowText & "]" & Str$(TimeLeft) & "秒後"
    TimeLeft = TimeLeft - 1

    If TimeLeft = 0 Then
        Button1.EnableWindow -1
        Button2.EnableWindow 0
        Timer1.Enable 0
        SetWindowText "InitiateSystemShutdown"
    End If
End Sub

'================================================================
'= 
'================================================================
Declare Sub Check1_on edecl ()
Sub Check1_on()
    If Check1.GetCheck = 0 Then
        Check1.SetWindowText "「安全に電源を切ることができる」"
    Else
        Check1.SetWindowText "「再起動」"
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End