none
Powershell таймер в gui RRS feed

  • Вопрос

  • Добрый день. Есть следующий код:

    Появляется интерфейс с кнопками "Да" и "Нет".

    Как сделать так, что если пользователь не нажмет на кнопки в течении 2 минут, то автоматический нажмется кнопка "Нет" (или выполнится аналогичное действие) ?

    Если пользователь нажимает на кнопку, то таймер автоматического нажатия кнопки "нет" прекращает свою работу.

    Сам код:

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    $form = New-Object System.Windows.Forms.Form
    $form.Text = 'Обновление'
    $form.Size = New-Object System.Drawing.Size(300,200)
    $form.StartPosition = 'CenterScreen'
    
    $Label = New-Object System.Windows.Forms.Label
    $Label.Text = "Обновить?"
    $Label.Location  = New-Object System.Drawing.Point(50,15)
    $Label.AutoSize = $true
    $form.Controls.Add($Label)
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Point(55,120) 
    $OKButton.Text = 'Да'
    $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::Yes
    $form.AcceptButton = $OKButton
    $form.Controls.Add($OKButton)
    
    $OKButton2 = New-Object System.Windows.Forms.Button
    $OKButton2.Location = New-Object System.Drawing.Point(155,120)
    $OKButton2.Size = New-Object System.Drawing.Size(75,23)
    $OKButton2.Text = 'Нет'
    $OKButton2.DialogResult = [System.Windows.Forms.DialogResult]::No
    $form.AcceptButton = $OKButton2
    $form.Controls.Add($OKButton2)
    
    $result = $form.ShowDialog()
    $result2 = $form2.ShowDialog()
    
    
    
    
    
    #Если нажали ДА, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::Yes)
    {
      start "D:\\1.ps1" 
    }
    
    #Если нажали НЕТ, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::No)
    {
      Stop-Process -Id $PID 
    }

     

    4 января 2020 г. 15:37

Ответы

  • День добрый.

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    $VerbosePreference = "Continue"
    $run = (get-date).AddMinutes(2)
    function MyFunctionNo { 
        Write-Verbose "start MyFunctionNo..."
        "Stop-Process -Id $PID "
    }
    function timertic {
        Write-Verbose "timer tick:"
        Write-Verbose "run = $run"
        Write-Verbose "now = $(get-date)"
        if ($run -le (get-date)) {
            $Timer.Stop(); 
            $Form.Close(); 
            $Form.Dispose();
            $Timer.Dispose();
            MyFunctionNo
        }
    }
    $timer = New-Object System.Windows.Forms.Timer
    $timer.Interval = 1000*10
    $timer.add_tick({ timertic })
    
    $form = New-Object System.Windows.Forms.Form
    $form.Text = 'Обновление'
    $form.Size = New-Object System.Drawing.Size(300,200)
    $form.StartPosition = 'CenterScreen'
    
    $Label = New-Object System.Windows.Forms.Label
    $Label.Text = "Обновить?"
    $Label.Location  = New-Object System.Drawing.Point(50,15)
    $Label.AutoSize = $true
    $form.Controls.Add($Label)
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Point(55,120) 
    $OKButton.Text = 'Да'
    $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::Yes
    $form.AcceptButton = $OKButton
    $form.Controls.Add($OKButton)
    
    $OKButton2 = New-Object System.Windows.Forms.Button
    $OKButton2.Location = New-Object System.Drawing.Point(155,120)
    $OKButton2.Size = New-Object System.Drawing.Size(75,23)
    $OKButton2.Text = 'Нет'
    $OKButton2.DialogResult = [System.Windows.Forms.DialogResult]::No
    $form.AcceptButton = $OKButton2
    $form.Controls.Add($OKButton2)
    
    $Timer.Start()
    $result = $form.ShowDialog()
    #$result2 = $form2.ShowDialog()
    
    #Если нажали ДА, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::Yes)
    {
      'start "D:\\1.ps1"'
    }
    
    #Если нажали НЕТ, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::No) {
        MyFunctionNo
    }
    


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    • Помечено в качестве ответа Vector BCOModerator 8 января 2020 г. 10:38
    4 января 2020 г. 19:12

Все ответы

  • День добрый.

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    $VerbosePreference = "Continue"
    $run = (get-date).AddMinutes(2)
    function MyFunctionNo { 
        Write-Verbose "start MyFunctionNo..."
        "Stop-Process -Id $PID "
    }
    function timertic {
        Write-Verbose "timer tick:"
        Write-Verbose "run = $run"
        Write-Verbose "now = $(get-date)"
        if ($run -le (get-date)) {
            $Timer.Stop(); 
            $Form.Close(); 
            $Form.Dispose();
            $Timer.Dispose();
            MyFunctionNo
        }
    }
    $timer = New-Object System.Windows.Forms.Timer
    $timer.Interval = 1000*10
    $timer.add_tick({ timertic })
    
    $form = New-Object System.Windows.Forms.Form
    $form.Text = 'Обновление'
    $form.Size = New-Object System.Drawing.Size(300,200)
    $form.StartPosition = 'CenterScreen'
    
    $Label = New-Object System.Windows.Forms.Label
    $Label.Text = "Обновить?"
    $Label.Location  = New-Object System.Drawing.Point(50,15)
    $Label.AutoSize = $true
    $form.Controls.Add($Label)
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Point(55,120) 
    $OKButton.Text = 'Да'
    $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::Yes
    $form.AcceptButton = $OKButton
    $form.Controls.Add($OKButton)
    
    $OKButton2 = New-Object System.Windows.Forms.Button
    $OKButton2.Location = New-Object System.Drawing.Point(155,120)
    $OKButton2.Size = New-Object System.Drawing.Size(75,23)
    $OKButton2.Text = 'Нет'
    $OKButton2.DialogResult = [System.Windows.Forms.DialogResult]::No
    $form.AcceptButton = $OKButton2
    $form.Controls.Add($OKButton2)
    
    $Timer.Start()
    $result = $form.ShowDialog()
    #$result2 = $form2.ShowDialog()
    
    #Если нажали ДА, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::Yes)
    {
      'start "D:\\1.ps1"'
    }
    
    #Если нажали НЕТ, то выполняем это.
    if ($result -eq [System.Windows.Forms.DialogResult]::No) {
        MyFunctionNo
    }
    


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    • Помечено в качестве ответа Vector BCOModerator 8 января 2020 г. 10:38
    4 января 2020 г. 19:12
  • Сначала подумал,что все работает как надо, потом увидел, что при нажатии на кнопку "Да" таймер не останавливается. Подскажите, как сделать так, чтобы таймер переставал работать после нажатия кнопки "Да".
    • Изменено DailonWong 8 января 2020 г. 12:00
    8 января 2020 г. 11:25