Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Блок компа и перезагрука после отработки батника (http://forum.oszone.net/showthread.php?t=164537)

Pozia 24-01-2010 19:59 1328776

Блок компа и перезагрука после отработки батника
 
Есть скрипт в учебнике такого вот плана:
Код:

#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 1328976

Цитата:

Цитата 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)


Pozia 26-01-2010 00:51 1329932

Цитата:

Цитата 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\ и ничего не работает. а как нужно сделать?

Creat0R 26-01-2010 01:08 1329944

Цитата:

Цитата Pozia
как нужно сделать? »

Скачать архив по ссылке, взять из него файл BlockInputEx.au3 и положить рядом со скриптом (например BlockTest.au3).

P.S
Там чтобы видеть прикреплённые файлы нужно регистрироваться.
Этот архив также есть тут, но не уверен, возможно и тут нужна регистрация.

Цитата:

Цитата Pozia
при этом запускался батник рядом лежащий »

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

Pozia 26-01-2010 07:35 1330046

Цитата:

Цитата Creat0R
Этот архив также есть тут »

качнулся нормально
Цитата:

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

конечно можно, но там мой батник очень много делает, и с ним я больше лажу нежели с автоит. Много спрашивать про автоит придется, а так более универсаьнее для меня и проще для редактирования в будущем. Спасибо, вечером протестирую.

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

Creat0R 26-01-2010 19:34 1330610

Цитата:

Цитата Pozia
Можно ли от нее до появления таймера избавится? »

Можно, нужно перенести строчку с ProgressOn вниз, после цикла While.

Pozia 26-01-2010 19:57 1330622

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 1330646

Цитата:

Цитата 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.

Время: 20:20.
© OSzone.net 2001-