-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Блок компа и перезагрука после отработки батника
Есть скрипт в учебнике такого вот плана:
Код:
#NoTrayIcon
BlockInput ( 1 )
$j=60
ProgressOn("Пожалуйста, подождите...", "Происходит настройка Windows", "Компьютером можно пользоваться после" & CHR(10) & "перезагрузки через " & $j & " сек.")
For $i = 1 to 99 step 100/$j
$j=$j-1
sleep(1000)
ProgressSet( $i, "Компьютером можно пользоваться после" & CHR(10) & "перезагрузки через " & $j & " сек.")
Next
ProgressSet(-1 , "Желаю приятного пользования данной сборкой" & CHR(10) & "Windows XP 2010 от Pozia")
Shutdown(2)
sleep(5000)
Раньше он запускался из автозагрузки у меня и все что устанавливалось при первом входе во время работы таймера успевало поставится. Сейчас же моя сборка стала сильно "навернутой" и просто увеличение таймера меня не устраивает так как его величина в зависимости от того на какой комп ставится винда нужна мне разная.
Прошу модифицировать его до такой логики - нужно чтобы данный скрипт запускался и вместо таймера была просто надпись Пожалуйста, подождите... Происходит настройка Windows и при этом запускался батник рядом лежащий. Как только батник отработал, то бишь его процесс в диспетчере задач исчез, нужно чтобы появился в этом же окне вместо надписи таймер секунд в 10 с надписью - Компьютером можно пользоваться после перезагрузки через 10 (здесь таймер отсчелкивает) сек. Желаю приятного пользования данной сборкой Windows XP 2010 от Pozia. Спасибо.
PS команда BlockInput ( 1 ) легко сбивается запуском диспетчера задач. Может есть способ блока компа без возможности снятия блока?
|
Цитата:
Цитата Pozia
нужно чтобы данный скрипт запускался и вместо таймера была просто надпись Пожалуйста, подождите... Происходит настройка Windows и при этом запускался батник рядом лежащий. Как только батник отработал, то бишь его процесс в диспетчере задач исчез, нужно чтобы появился в этом же окне вместо надписи таймер секунд в 10 с надписью - Компьютером можно пользоваться после перезагрузки через 10 (здесь таймер отсчелкивает) сек. Желаю приятного пользования данной сборкой Windows XP 2010 от Pozia. »
|
Вот так например (используется UDF _BlockInputEx для блокировки без отключения по «Alt + Ctrl + Del»):
Код:
#NoTrayIcon
#include <BlockInputEx.au3>
Opt("WinWaitDelay", 1)
$sTaskMgr_Title = "[CLASS:#32770;REGEXPTITLE:(Диспетчер задач|Task Manager)]"
;Disable Task Manager
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "1")
_BlockInputEx(1)
ProgressOn("Пожалуйста, подождите...", "Происходит настройка Windows")
$iBat_PID = Run(@ScriptDir & "\BatFile.bat")
While ProcessExists($iBat_PID)
If WinExists($sTaskMgr_Title) Then WinClose($sTaskMgr_Title)
Sleep(100)
WEnd
$iTimer = 10
$iStep = (100 / $iTimer)
$iPrgrs = 100
$iTimerInit = TimerInit()
While $iTimer >= 0
Sleep(10)
If WinExists($sTaskMgr_Title) Then WinClose($sTaskMgr_Title)
If TimerDiff($iTimerInit) >= 1000 Then
$iPrgrs -= $iStep
ProgressSet($iPrgrs, _
"Компьютером можно пользоваться после" & @CRLF & "перезагрузки, через " & $iTimer & " сек.", _
"Настройка Windows завершена")
$iTimer -= 1
$iTimerInit = TimerInit()
EndIf
WEnd
ProgressSet(-1, "Желаю приятного пользования данной сборкой" & @CRLF & "Windows XP 2010 от Pozia")
;Enable Task Manager back
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "0")
Shutdown(2)
Sleep(5000)
|
Цитата:
Цитата Creat0R
Вот так например (используется UDF _BlockInputEx для »
|
не совсем понял что делать с этой ссылкой. я создал файл BlockInputEx.au3 содержания:
Код:
#include <BlockInputEx.au3>
;================== hWindows usage Example ==================
HotKeySet("{ESC}", "_Quit") ;Это вызовет выход из скрипта (на любом окне кроме блокнота (см. далее)).
Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
WinWait("[REGEXPCLASS:Notepad.*]")
$hNotepad_Wnd = WinGetHandle("[REGEXPCLASS:Notepad.*]")
ControlSetText($hNotepad_Wnd, "", "", _
"Now try to input some keys in here..." & @CRLF & _
"Well, that's the idea, you can't, don't you?" & @CRLF & @CRLF & ":)")
;Здесь мы блокируем *все* клавишы на клавиатуре для определённого окна (в этом случае окно Блокнота).
_BlockInputEx(3, "", "", $hNotepad_Wnd)
;Это только для отладки, на сллучай если что то нарушится, скрипт завершит свою работу через 10 секунд.
AdlibEnable("_Quit", 10000)
While 1
Sleep(100)
WEnd
Func _Quit()
Exit
EndFunc
и положил по пути c:\Program Files\AutoIt3\Include\ и ничего не работает. а как нужно сделать?
|
Скачать архив по ссылке, взять из него файл BlockInputEx.au3 и положить рядом со скриптом (например BlockTest.au3).
P.S
Там чтобы видеть прикреплённые файлы нужно регистрироваться.
Этот архив также есть тут, но не уверен, возможно и тут нужна регистрация.
Цитата:
Цитата Pozia
при этом запускался батник рядом лежащий »
|
Я вот немогу понять, зачем делать гибрид, когда всё можно сделать на чистом AutoIt?
|
Цитата:
Цитата Creat0R
Этот архив также есть тут »
|
качнулся нормально
Цитата:
Цитата Creat0R
Я вот немогу понять, зачем делать гибрид, когда всё можно сделать на чистом AutoIt? »
|
конечно можно, но там мой батник очень много делает, и с ним я больше лажу нежели с автоит. Много спрашивать про автоит придется, а так более универсаьнее для меня и проще для редактирования в будущем. Спасибо, вечером протестирую.
Creat0R, при запуски скрипта автоит в окне есть полоса прогресса которая пустая и только после отработки батника она заполняется и начинает уменьшаться. Можно ли от нее до появления таймера избавится? Так будет думаю красивее :)
|
Цитата:
Цитата Pozia
Можно ли от нее до появления таймера избавится? »
|
Можно, нужно перенести строчку с ProgressOn вниз, после цикла While.
|
Creat0R, сделал вот так:
Код:
....
While ProcessExists($iBat_PID)
If WinExists($sTaskMgr_Title) Then WinClose($sTaskMgr_Title)
Sleep(100)
WEnd
ProgressOn("Пожалуйста, подождите...", "Происходит настройка Windows")
$iTimer = 10
$iStep = (100 / $iTimer)
$iPrgrs = 100
$iTimerInit = TimerInit()
.........
Получилось не совсем то. Окно Пожалуйста, подождите...", "Происходит настройка Windows вообще не появляется пока идет работа батника, и только показывает таймер перезагрузки. А хотелось бы чтобы пока работал батник показывало окно Пожалуйста, подождите...", "Происходит настройка Windows
|
Цитата:
Цитата Pozia
хотелось бы чтобы пока работал батник показывало окно Пожалуйста, подождите...", "Происходит настройка Windows »
|
Ну это будет уже не прогресс, т.к нативно скрыть полосу в нём нельзя, но можно попробовать так (чтобы полоса прогресса не мелькала на долю секунды, используется убирание окна за пределы видимости и его возвращение на центр после скрытия полосы прогресса):
Код:
......
ProgressOn("Пожалуйста, подождите...", "Происходит настройка Windows", "", -500, -500)
$hProgress_Win = WinGetHandle("Пожалуйста, подождите...", "Происходит настройка Windows")
ControlHide($hProgress_Win, "", "msctls_progress321")
WinMove($hProgress_Win, "", (@DesktopWidth / 2)-(306/2), (@DesktopHeight / 2)-(125/2))
.....
While ProcessExists($iBat_PID)
If WinExists($sTaskMgr_Title) Then WinClose($sTaskMgr_Title)
Sleep(100)
WEnd
ControlShow($hProgress_Win, "", "msctls_progress321")
.....
|
Время: 20:20.
© OSzone.net 2001-