Обновление текстовой области со статусом в ОМТ [дубликат]

Я согласен со всем, что сказал Лева7. Тем не менее, я бы предложил другое решение, которое должно использовать raw_input для Python 2 или input для Python 3 следующим образом:

args = []
s = raw_input()                # input() for Python 3
while s != '':
    args.extend([int(arg) for arg in s.strip().split()])
    s = raw_input()

Конечно, это не однострочный но это делает работу, и легко понять, как это делается. Кроме того, в конце ввода никаких специальных символов не требуется.

2
задан iRon 1 June 2013 в 11:27
поделиться

4 ответа

При написании HTA вы должны думать асинхронно. Попробуйте переписать код, чтобы использовать window.setTimeout. В следующем примере я буду использовать window.setTimeout для создания звука колокола каждые 2 секунды:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=8">
<title>Bell Test</title>
<script language="VBScript">
Option Explicit
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
Sub DoPing
    divText.innerText = Now
    objWShell.Run "%COMSPEC% /c ECHO " & Chr(7), 0, False
    window.setTimeOut "DoPing", 2000
End Sub
Sub window_OnLoad
   window.ResizeTo 240,130
   DoPing
End Sub
</script>
</head>
<body>
<div id="divText">TEST</div>
</body>
</html>
2
ответ дан Stephen Quan 19 August 2018 в 02:42
поделиться

Ожидание (2000) паузы 2 секунды

Sub Wait(Time)
  Dim wmiQuery, objWMIService, objPing, objStatus
  wmiQuery = "Select * From Win32_PingStatus Where Address = '1.1.1.1' AND Timeout = " & Time
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set objPing = objWMIService.ExecQuery(wmiQuery)
  For Each objStatus in objPing
  Next
End Sub
0
ответ дан benka 19 August 2018 в 02:42
поделиться
Sub Sleep(iMilliSeconds)

    With GetObject("winmgmts:\\.\root\cimv2")
        With .Get("__IntervalTimerInstruction").SpawnInstance_()
            .TimerId = "Sleep"
            .IntervalBetweenEvents = iMilliSeconds
            .Put_()
        End With
        .ExecNotificationQuery("SELECT * FROM __TimerEvent WHERE TimerId='Sleep'").NextEvent
    End With

End Sub

Добавлено 2015-02-11:

К сожалению, эта функция не работает при использовании Internet Explorer 10 (см. комментарии ниже). Если Internet Explorer 11 установлен, он работает, если вы запустите HTA в качестве администратора.

1
ответ дан iRon 19 August 2018 в 02:42
поделиться
  • 1
    Интересно, но я получаю Access denied при выполнении .Put_(). Есть идеи...? – Teemu 1 June 2013 в 10:49
  • 2
    ai, я узнаю это из некоторых других HTA со встроенными вызовами WMI. Это Windows 8 (я создал отрезанный в Windows 7 и действительно просто подтвердил ошибку в Windows 8). Рабочий стол должен запускать его как администратор, но это делает целое решение менее интересным. Нужно исследовать, или если кто-то еще знает, как это сделать? – iRon 1 June 2013 в 17:07
  • 3
    На самом деле я использую Windows7 (с IE10). Этот код WMI работает в приложении, где я тестировал вашу функцию sleep(). Я пробовал с VBS, а также перевел ваш код на JavaScript, но в обоих случаях я получаю ошибку Access denied. – Teemu 1 June 2013 в 17:30
  • 4
    Вы правы, разница в действительности IE, IE8 отлично работает ... (я продолжу расследование на следующей неделе) – iRon 1 June 2013 в 18:00
  • 5
    Я подал сообщение об ошибке для IE10 в Microsoft: connect.microsoft.com/IE/feedback/details/789421 – iRon 4 June 2013 в 09:53

У меня была та же проблема с HTA. Мое решение с vbs ...

Sub sleep (Timesec)
    Set objwsh = CreateObject("WScript.Shell") 
    objwsh.Run "Timeout /T " & Timesec & " /nobreak" ,0 ,true
    Set objwsh = Nothing
End Sub

' example wait for 3 seconds
sleep 3

Процедура вызовет команду оболочки, сведенную к минимуму и без команды клавиатуры. Разрешается только ^ C, но это не будет дано пользователю в этой ситуации.

2
ответ дан uk2015 19 August 2018 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: