Войти

Показать полную графическую версию : [решено] Блок компа и перезагрука после отработки батника


Pozia
24-01-2010, 19:59
Есть скрипт в учебнике такого вот плана:
#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 ) легко сбивается запуском диспетчера задач. Может есть способ блока компа без возможности снятия блока?

Creat0R
25-01-2010, 00:54
нужно чтобы данный скрипт запускался и вместо таймера была просто надпись Пожалуйста, подождите... Происходит настройка Windows и при этом запускался батник рядом лежащий. Как только батник отработал, то бишь его процесс в диспетчере задач исчез, нужно чтобы появился в этом же окне вместо надписи таймер секунд в 10 с надписью - Компьютером можно пользоваться после перезагрузки через 10 (здесь таймер отсчелкивает) сек. Желаю приятного пользования данной сборкой Windows XP 2010 от Pozia. »

Вот так например (используется UDF _BlockInputEx (http://autoit-script.ru/index.php?topic=162.0) для блокировки без отключения по «Alt + Ctrl + Del»):

#NoTrayIcon
#include <BlockInputEx.au3>

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("WinWaitDelay", 1)

$sTaskMgr_Title = "[CLASS:#32770;REGEXPTITLE:(Диспетчер задач|Task Manager)]"

;Disable Task Manager
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "1")

_BlockInputEx(1)

ProgressOn (http://www.autoitscript.com/autoit3/docs/functions/ProgressOn.htm)("Пожалуйста, подождите...", "Происходит настройка Windows")

$iBat_PID = Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\BatFile.bat")

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) ProcessExists (http://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm)($iBat_PID)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($sTaskMgr_Title) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) WinClose (http://www.autoitscript.com/autoit3/docs/functions/WinClose.htm)($sTaskMgr_Title)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(100)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

$iTimer = 10
$iStep = (100 / $iTimer)
$iPrgrs = 100
$iTimerInit = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) $iTimer >= 0
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($sTaskMgr_Title) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) WinClose (http://www.autoitscript.com/autoit3/docs/functions/WinClose.htm)($sTaskMgr_Title)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($iTimerInit) >= 1000 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iPrgrs -= $iStep

ProgressSet (http://www.autoitscript.com/autoit3/docs/functions/ProgressSet.htm)($iPrgrs, _
"Компьютером можно пользоваться после" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & "перезагрузки, через " & $iTimer & " сек.", _
"Настройка Windows завершена")

$iTimer -= 1
$iTimerInit = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

ProgressSet (http://www.autoitscript.com/autoit3/docs/functions/ProgressSet.htm)(-1, "Желаю приятного пользования данной сборкой" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & "Windows XP 2010 от Pozia")

;Enable Task Manager back
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "0")

Shutdown (http://www.autoitscript.com/autoit3/docs/functions/Shutdown.htm)(2)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(5000)

Pozia
26-01-2010, 00:51
Вот так например (используется 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\ и ничего не работает. а как нужно сделать?

Creat0R
26-01-2010, 01:08
как нужно сделать? »
Скачать архив по ссылке, взять из него файл BlockInputEx.au3 и положить рядом со скриптом (например BlockTest.au3).

P.S
Там чтобы видеть прикреплённые файлы нужно регистрироваться.
Этот архив также есть тут (http://www.autoitscript.com/forum/index.php?app=core&module=attach&section=attach&attach_id=28001), но не уверен, возможно и тут нужна регистрация.

при этом запускался батник рядом лежащий »
Я вот немогу понять, зачем делать гибрид, когда всё можно сделать на чистом AutoIt?

Pozia
26-01-2010, 07:35
Этот архив также есть тут »
качнулся нормально
Я вот немогу понять, зачем делать гибрид, когда всё можно сделать на чистом AutoIt? »
конечно можно, но там мой батник очень много делает, и с ним я больше лажу нежели с автоит. Много спрашивать про автоит придется, а так более универсаьнее для меня и проще для редактирования в будущем. Спасибо, вечером протестирую.

Creat0R, при запуски скрипта автоит в окне есть полоса прогресса которая пустая и только после отработки батника она заполняется и начинает уменьшаться. Можно ли от нее до появления таймера избавится? Так будет думаю красивее :)

Creat0R
26-01-2010, 19:34
Можно ли от нее до появления таймера избавится? »
Можно, нужно перенести строчку с ProgressOn вниз, после цикла While.

Pozia
26-01-2010, 19:57
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

Creat0R
26-01-2010, 20:22
хотелось бы чтобы пока работал батник показывало окно Пожалуйста, подождите...", "Происходит настройка 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")

.....




© OSzone.net 2001-2012