Python Screen Locker для збереження очей

10 Серпня 2010

Зараз здоров'я в нас вистачає і ми можемо не задумуватися про наші очі, про нашу спину, про наші руки... та пройде 10-20 років і все зміниться. У всіх є професійні хвороби, нажаль і програмістів не оминула така участь.

Почавши задумуватися над цими питаннями прийшов до висновку, що головна наша проблема в захопленні. Ми так захоплюємося що забуваємо про час. Вже в нас будуть боліти очі, а ми все одно думаємо, що ще годинку попрацюємо і все. А потім ще годинку і так поки за вікном не буде підійматися ранкове сонце.

Я себе не можу змусити відпочивати (, тому написав скриптик на пітоні, який висить в кроні і з частотою в одну годину на 10 хвилин робить екран чорним і блокує всі клавіши, щоб прожка вимикалась лише перезавантаженням. Хочеш не хочеш, а відпочивати змушує.

Якщо ви не програміст на Пітоні, то з цієї папки можна дістати і скрипт і конфіг і екзешник (якщо немає пітону) - http://bitbucket.org/presidentua/web-alarm/src/0b350733d9e1/save_eye/

Якщо ж ви Пітон-програміст і маєте час, то пропоную вам іспит - не дивлячись на мою прогу напишіть аналог за таким ТЗ: - при запуску робити чорний екран - ховати мишку - блокувати всі клавіши - блокувати Таск Манаджер - нормально виконуватися при запуску через Task Scheduler (!!! тут будуть складності в нових версіях Віндовса).

Бережіть себе!

PS: Рішення цієї задачки дивіться нижче в тексті. 1. Перехоплеення всіх клавіш через лібу pyHook:

def OnKeyboardEvent(event):
    if event.Key.lower() in ['lwin', 'tab', 'lmenu']:
        return False
    else:
        return True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
2. Таск Манаджер вимикається через Рееєстр:
def set_DisableTaskmgr(value):
    import _winreg
    task_key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Policies\System')
    _winreg.SetValueEx(task_key, 'DisableTaskmgr', 0, _winreg.REG_DWORD, value)
    _winreg.CloseKey(task_key)
3. І нарешті з розгортанням на весь екран є проблема, бо нові версії віндовс не дозволяють напряму виконувати функцію SetForegroundWindow для неактивної проги. Щоб обійти це спочатку повинні приєднати свій процес до вводу активного процесу і потім ми вже можемо викликати SetForegroundWindow:
currentThreadId = win32api.GetCurrentThreadId()
remoteThreadId = win32process.GetWindowThreadProcessId(win32gui.GetForegroundWindow())[0]
ctypes.windll.user32.AttachThreadInput(remoteThreadId, currentThreadId, True)
win32gui.SetForegroundWindow(pygame.display.get_wm_info()['window'])
ctypes.windll.user32.AttachThreadInput(remoteThreadId, currentThreadId, False)
 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com