Option Strict Off Option Explicit On Imports System.Runtime.InteropServices Friend Class Form1 Inherits System.Windows.Forms.Form ' 休止/スタンバイする関数の宣言 ' Hibernate : 1 休止 0: スタンバイ ' ForceCritical : 1 即時 0: 各APに通知-応答を待つ ' DisableWakeEvent: 1 全システムイベントを無効 WaitableTimerも停止! 注意 ' 0 いくつかのイベントを有効 <DllImport("Powrprof.dll", SetLastError:=True)> _ Private Shared Function SetSuspendState( _ ByVal Hibernate As Integer, _ ByVal ForceCritical As Integer, _ ByVal DisableWakeEvent As Integer) As Long End Function Private 予定時刻 As Date Private Op As Long '処理種別 Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load '------------------ ' 書式設定 '------------------ Me.Text = "指定時間後に休止/スタンバイ" Button1.Text = "休止" Button2.Text = "スタンバイ" Button3.Text = "中止" Button3.Enabled = False With Combo1 .Font = VB6.FontChangeSize(.Font, 11) 'フォントサイズ .ImeMode = System.Windows.Forms.ImeMode.Off 'IMEモード:オフ .Items.Add(0) '時間リスト 0分 .Items.Add(1) '1分 .Items.Add(10) '10分 .Items.Add(30) '30分 .SelectedIndex = 0 '初期選択位置:0分 End With With Label1 .Font = VB6.FontChangeSize(.Font, 16) .TextAlign = System.Drawing.ContentAlignment.TopCenter .Text = "" End With With Timer1 .Enabled = False '初期状態は無効 .Interval = 1000 '周期:1秒 End With End Sub '---------------------------- ' 指定時間の入力チェック '---------------------------- Private Sub Combo1_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles Combo1.KeyPress Dim KeyAscii As Short = Asc(eventArgs.KeyChar) If (KeyAscii <> Asc(vbBack)) And (Not (Chr(KeyAscii) Like "[0-9]")) Then KeyAscii = 0 '0〜9以外は不許可 eventArgs.KeyChar = Chr(KeyAscii) If KeyAscii = 0 Then eventArgs.Handled = True End If End Sub Private Sub Combo1_Validating(ByVal eventSender As System.Object, ByVal eventArgs As System.ComponentModel.CancelEventArgs) Handles Combo1.Validating Dim Cancel As Boolean = eventArgs.Cancel If Combo1.Text = "" Then MsgBox("指定時間:空白は無効") Cancel = True '空白は不許可 End If eventArgs.Cancel = Cancel End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call Go(1) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Call Go(0) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Timer1.Enabled = False 'タイマー停止 Label1.Text = "" Button1.Enabled = True Button2.Enabled = True Button3.Enabled = False End Sub Private Sub Go(ByVal Param As Integer) Op = Param '処理種別 Label1.ForeColor = System.Drawing.Color.Black '表示色=黒 Timer1.Enabled = True If Val(Combo1.Text) = 0 Then '指定時間が0なら 予定時刻 = System.DateTime.FromOADate(Now.ToOADate + TimeSerial(0, 0, 5).ToOADate) '5秒前から Else 予定時刻 = System.DateTime.FromOADate(Now.ToOADate + TimeSerial(0, Val(Combo1.Text), 0).ToOADate) 'そのまま End If Button1.Enabled = False Button2.Enabled = False Button3.Enabled = True End Sub Private Sub Timer1_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick Dim t As TimeSpan '残り時間 t = New TimeSpan(0, 0, (予定時刻 - Now()).TotalSeconds) '秒単位(ミリ秒は表示しない) Label1.Text = t.ToString Select Case t.TotalSeconds Case Is <= 0 '時間=0 '------------------- ' 処理実行 '------------------- Call SetSuspendState(Op, 1, 0) '強制 End '終了 Case Is <= 10 '10秒以内 Label1.ForeColor = System.Drawing.Color.Red '表示色=赤 Beep() 'カウントダウン音 Case Else End Select End Sub End Class