Рубрики
Без рубрики

Включение блокировки экрана с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Несколько месяцев назад, мой работодатель должен был заблокировать некоторые наши рабочие станции, чтобы соответствовать некоторому новым программным обеспечению, мы устанавливали из другой государственной организации. Нам нужно было заставить эти машины блокироваться после того, как так много минут истекло, и нам нужно было сделать так, чтобы пользователь не мог изменить эти настройки. В этой статье вы узнаете, как это и как бонус, я также покажу вам, как заблокировать свою машину Windows по требованию с Python.

Взломать реестр, чтобы заблокировать машину

Для начала мы посмотрим на мой оригинальный сценарий, а затем мы немного ревертируем, чтобы сделать код лучше:

from _winreg import CreateKey, SetValueEx
from _winreg import HKEY_CURRENT_USER, HKEY_USERS
from _winreg import REG_DWORD, REG_SZ

try:
    i = 0
    while True:
        subkey = EnumKey(HKEY_USERS, i)
        if len(subkey) > 30:
            break
        i += 1
except WindowsError:
    # WindowsError: [Errno 259] No more data is available
    # looped through all the subkeys without finding the right one
    raise WindowsError("Could not apply workstation lock settings!")

keyOne = CreateKey(HKEY_USERS, r'%s\Control Panel\Desktop' % subkey)
keyTwo = CreateKey(HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Policies\System')

# enable screen saver security
SetValueEx(keyOne, 'ScreenSaverIsSecure', 0, REG_DWORD, 1)
# set screen saver timeout
SetValueEx(keyOne, 'ScreenSaveTimeOut', 0, REG_SZ, '420')
# set screen saver
SetValueEx(keyOne, 'SCRNSAVE.EXE', 0, REG_SZ, 'logon.scr')
# disable screen saver tab
SetValueEx(keyTwo, 'NoDispScrSavPage', 0, REG_DWORD, 1)

CloseKey(keyOne)
CloseKey(keyTwo)

Потребовалось некоторое время, чтобы обнаружить это, но чтобы установить правильный ключ, нам нужно найти первый подквой ключ, который длиной более 30 символов под HKEY_USTERS TIVE. Я уверен, что есть, наверное, лучший способ сделать это, но я еще не нашел. В любом случае, как только мы нашли длинный ключ, мы вырвались из цикла и откройте ключи, которые нам нужны или создаем их, если они еще не существуют. Это причина, по которой мы используем Createkey, так как она сделает только что. Далее мы устанавливаем четыре значения, а затем закрываем клавиши, чтобы применить новые настройки. Вы можете прочитать комментарии, чтобы увидеть, что делает каждый ключ. Теперь давайте немного уточним код, чтобы сделать его в функцию:

from _winreg import *

def modifyRegistry(key, sub_key, valueName, valueType, value):
    """
    A simple function used to change values in
    the Windows Registry.
    """
    try:
        key_handle = OpenKey(key, sub_key, 0, KEY_ALL_ACCESS)
    except WindowsError:
        key_handle = CreateKey(key, sub_key)
        
    SetValueEx(key_handle, valueName, 0, valueType, value)
    CloseKey(key_handle)
    
try:
    i = 0
    while True:
        subkey = EnumKey(HKEY_USERS, i)
        if len(subkey) > 30:
            break
        i += 1
except WindowsError:
    # WindowsError: [Errno 259] No more data is available
    # looped through all the subkeys without finding the right one
    raise WindowsError("Could not apply workstation lock settings!")

subkey = r'%s\Control Panel\Desktop' % subkey
data= [('ScreenSaverIsSecure', REG_DWORD, 1),
              ('ScreenSaveTimeOut', REG_SZ, '420'),
              ('SCRNSAVE.EXE', REG_SZ, 'logon.scr')]

for valueName, valueType, value in data:
    modifyRegistry(HKEY_USERS, subkey, valueName, 
                   valueType, value)

modifyRegistry(HKEY_CURRENT_USER,
               r'Software\Microsoft\Windows\CurrentVersion\Policies\System',
               'NoDispScrSavPage', REG_DWORD, 1)

Как видите, сначала мы импортируем все в _winreg модуль. Это на самом деле не рекомендуется случайно перезаписать функции, которые вы импортировали, поэтому это иногда называют «отравлением пространства имен». Тем не менее, почти каждый пример, который я когда-либо видел, что использует модули _Winreg, так и делает это так. Смотрите первый пример для правильного способа импорта от него.

Далее мы создаем функцию общего назначения, которая может открыть ключ или создать ключ, если она еще не там. Функция также установит значение и закроет ключ для нас. После этого мы делаем в основном то же самое, что мы сделали в предыдущем примере: мы верим по поводу HKEY_USERS TIVE и сломаться надлежащим образом. Чтобы немного смешать, мы создаем данные Переменная, которая содержит список кортежей. Мы зацикливаемся и называем нашу функцию с соответствующими параметрами и для хорошей меры, мы демонстрируем, как назвать его за пределами цикла.

Блокировка машины программно

Теперь вы можете думать, что мы уже покрыли, как заблокировать машину программно. Ну, мы сделали в некотором смысле; Но то, что мы действительно сделали, было установлено таймер, чтобы заблокировать машину когда-нибудь в будущем, когда машина была простаивающейся. Что если мы хотим заблокировать машину сейчас? Некоторые из вас, вероятно, думают, что мы должны просто ударить ключ Windows Plus «L», и это хорошая идея. Тем не менее, причина, по которой я создал этот скрипт, заключается в том, что я должен удаленно подключиться к моей машине с VNC с Время от времени и мне нужно пройти несколько шагов, чтобы заблокировать машину при использовании VNC, тогда как у вас есть Python правильно, Вы можете просто дважды щелкнуть файл скрипта и сделать ли он блокировку для вас. Вот что делает этот маленький сценарий:

import os

winpath = os.environ["windir"]
os.system(winpath + r'\system32\rundll32 user32.dll, LockWorkStation')

Это три линии скрипт импортирует ОС Модуль, захватывает каталог Windows, используя его окружающая среда метод, а затем звонки OS.System заблокировать машину. Если вы должны были открыть окно DOS на вашей машине и введите в него следующее, у вас будет точно такой же эффект:

C: \ Windows \ System32 \ Rundll32 User32.dll, LockWorkStation

Обертывание

Теперь вы знаете, как заблокировать машину Python. Если вы поместите первый пример в сценарии входа в систему, вы можете использовать его заблокировать некоторые или все машины в вашей сети. Это очень удобно, если у вас есть пользователи, которые любят бродить или перейти на много встреч, но оставьте свои машины вошли в систему. Он защищает их от Snooping и может защитить вашу компанию от Spionage.