Что нового

Блокирование рабочего стола после запуска системы и до выполнения задания

skyvlad

Новичок
Сообщения
1
Репутация
0
3.3.6.1: 3.

Описание:
Здравствуйте!
Хочется такую штуку, которая бы блокировала пользование windows и прочими благами до выполнения одной единственной программы, например Stamina, то есть хотя бы одного урока на нем. Уж очень хочется поднять «грамотность подрастающего народа», да своя мешает. Идея пришла такая когда показали заблокированный баннером компьютер. Ну хотя бы подскажите про методы, но только пожалуйста не пинайте сразу.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <WindowsConstants.au3>

GUICreate('', @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
$Button = GUICtrlCreateButton('Exit', @DesktopWidth - 80, @DesktopHeight - 33, 70, 23)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $Button
			Exit
	EndSwitch
WEnd
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Если вдруг я не правильно понял вопрос, извиняюсь.
Пример 1. Простое.
Код:
#NoTrayIcon ;не показывать иконку скрипта/программы в трее (правом нижнем углу экрана)
Run("calc.exe") ;запустим Калькулятор
WinWait ("[Class:SciCalc]") ;ждем появления окна Калькулятор по имени класса окна (класс этого окна узнали из программы AutoIt Window Info - это SciCalc)
$hWND = WinGetHandle ("[Class:SciCalc]") ;получили в переменную $hWND специальное уникальное значение (хэндл) этого ожидаемого окна
WinSetState ($hWND, "", @SW_DISABLE) ;установили нашему окну (которое мы ждали) с ЭТИМ хендлом состояние - ОТКЛЮЧИТЬ (типа заблокировать)
MsgBox(64, "Инфо", "Попробуйте что-нибудь сделать на Калькуляторе"&@CRLF&"Ладно, после нажатия Ок ждем 7 секунд и Калькулятор - Ваш")
WinSetOnTop ($hWND, "", 1) ;установили нашему окну (с нашим хэндлом $hWND) состояние БЫТЬ ПОВЕРХ ВСЕХ ОКОН
Sleep(7000) ;пауза 7 секунд 
WinSetState ($hWND, "", @SW_ENABLE) ;теперь установили нашему окну (которое мы ждали) с ЭТИМ хендлом состояние - ВКЛЮЧИТЬ (типа разблокировать)
Exit ;конец программы (выход)

Пример 2. Теперь чуть сложнее.
Осторожно, скорее всего придется перезагружаться нажатием кнопки на системном блоке.
Код:
#NoTrayIcon ;не показывать иконку скрипта/программы в трее (правом нижнем углу экрана)
Run("calc.exe") ;запустим Калькулятор
WinWait ("[Class:SciCalc]") ;ждем появления окна Калькулятор по имени класса окна (класс этого окна узнали из программы AutoIt Window Info - это SciCalc)
$hWND = WinGetHandle ("[Class:SciCalc]") ;получили в переменную $hWND специальное уникальное значение (хэндл) этого ожидаемого окна
;;;;начало бесконечного в данном случае цикла
While 1
	Sleep(50) ;пауза(нужна тут, чтобы не было нагрузки на процессор)
	$hWND1 = WinGetHandle ("") ;получаем в переменную $hWND1 хэндл произвольного текущего окна (в цикле)
	If $hWND1 <> $hWND Then ;сравниваем полученный хэндл произвольного текущего окна с хэндлом окна Калькулятора; и если они не равны - тогда
		WinSetState ($hWND1, "", @SW_DISABLE) ;тогда устанавливаем текущему окну по его хэндлу состояние - ОТКЛЮЧИТЬ (блокируем)
	EndIf
	WinSetOnTop ($hWND, "", 1) ;все время в нашем цикле ставим Калькулятор ПО ВЕРХ ВСЕХ ОКОН
	WinSetState ($hWND, "", @SW_RESTORE) ; и еще все время в нашем цикле возвращаем Калькулятор в положение ОТКРЫТОГО
WEnd
;;;;конец этого цикла
 

La2Angel

Новичок
Сообщения
156
Репутация
1
Я очень плохо шарю в AutoIt, но тут кое что добавли, что бы перезаходить в учетку не приходилось.

Код:
Run("calc.exe") ;запустим Калькулятор
WinWait ("[Class:CalcFrame]") ;ждем появления окна Калькулятор по имени класса окна (класс этого окна узнали из программы AutoIt Window Info - это SciCalc)
$hWND = WinGetHandle ("[Class:CalcFrame]") ;получили в переменную $hWND специальное уникальное значение (хэндл) этого ожидаемого окна
;;;;начало бесконечного в данном случае цикла

While 1

	$var = WinList() ; заносим список всен найденных на данный момент окон

	Sleep(50) ;пауза(нужна тут, чтобы не было нагрузки на процессор)
If WinExists("[Class:CalcFrame]") Then ; Проверяем наличие окна калькулятора
    $hWND1 = WinGetHandle ("") ;получаем в переменную $hWND1 хэндл произвольного текущего окна (в цикле)
    If $hWND1 <> $hWND Then ;сравниваем полученный хэндл произвольного текущего окна с хэндлом окна Калькулятора; и если они не равны - тогда
        WinSetState ($hWND1, "", @SW_DISABLE) ;тогда устанавливаем текущему окну по его хэндлу состояние - ОТКЛЮЧИТЬ (блокируем)
    EndIf
    WinSetOnTop ($hWND, "", 1) ;все время в нашем цикле ставим Калькулятор ПО ВЕРХ ВСЕХ ОКОН
    WinSetState ($hWND, "", @SW_RESTORE) ; и еще все время в нашем цикле возвращаем Калькулятор в положение ОТКРЫТОГО
Else
	;Если не находим окна калькулятора, то просто возврашаем всем атрибут активировать.
	For $i = 1 to $var[0][0]
		If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
			WinSetState ($var[$i][0], "", @SW_ENABLE)
		EndIf
	Next

	Exit
EndIf
WEnd
;;;;конец этого цикла
Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then 
    Return 1
  Else
    Return 0
  EndIf

EndFunc



Добавлено:
Сообщение автоматически объединено:

Вроде рабочий стол в норму приводит, а вот меню пуск нет, как исправить :smile:?
 
Верх