Что нового

скриншот блокировки экрана

Коршун

Новичок
Сообщения
58
Репутация
1
Как же получить скриншот блокировки экрана??
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
Global Const $DESKTOP_SWITCHDESKTOP = 0x0100
While 1
   If _IsWorkstationLocked() Then
	  _ScreenCapture(@ScriptDir & '\Screenshot.bmp')
	  Exit
   EndIf
   Sleep(10)
WEnd

Func _IsWorkstationLocked()
   Local $Result = False
   
   $hDesktop = DllCall('user32.dll', 'hwnd', 'OpenDesktop', 'str', 'Default', 'int', 0, 'int', 0, 'int', $DESKTOP_SWITCHDESKTOP)
   If Not @error Then
      $Result = DllCall('user32.dll', 'int', 'SwitchDesktop', 'hwnd', $hDesktop[0])
      $Result = Not $Result[0]
      DllCall('user32.dll', 'int', 'CloseDesktop', 'hwnd', $hDesktop[0])
   EndIf
   Return $Result
EndFunc   ;==>_IsWorkstationLocked

Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        Sleep(10)
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc
Код:
_ScreenCapture_Capture()
тоже не помогает((
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Средствами AutoIt это, скорее всего, сделать невозможно. Процесс LogonUI надежно блокирует доступ к своим потрохам со стороны клиентских программ. Я вижу выход в написании специальной службы с системными привилегиями или аналогичного драйвера, только так можно пробиться с-под LogonUI.
Но ни то, ни другое не пишется на AutoIt.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
http://rapidsoft.org/articles/wintuning/item/128-win7_logonui_screenshot
 
Автор
К

Коршун

Новичок
Сообщения
58
Репутация
1
Если нет возможности получить скриншот, может есть способ его собрать (картинка приветствия + имя учетки + остальное)?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Вы что сделать-то хотите? Ну, получите скриншот... а дальше?
 
Автор
К

Коршун

Новичок
Сообщения
58
Репутация
1
InnI [?]
Вы что сделать-то хотите? Ну, получите скриншот... а дальше?
Дальше планирую перехватить блокировку и повесить свою картинку, имитация блокировки.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
InnI [?]
Это которая Win+L ?Удачи.

В теории ее можно перехватить, ведь Teamviewer и Parallels VM это могут. Но на AutoIT это, наверное невыполнимо.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Medic84
В теории ее можно перехватить
Узнать о нажатии Win+L можно, перехватить с возможностью отмены блокировки - я о таком не слышал (Win98 не считается).

Teamviewer и Parallels VM это могут
У меня TeamViewer версии 7 - не может. Имитировать на удалённой машине - пожалуйста, а перехватить - нет.
С Parallels VM не работал, но VMware Player тоже не может: при нажатии Win+L блокируется и виртуальная машина и реальная.
 
Автор
К

Коршун

Новичок
Сообщения
58
Репутация
1
Да без разницы. Вопрос не о том.
Как собрать картинку блокировки? Что бы создать иллюзию блокировки?
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Может проще поставить Win на виртуальную машину и с нее сделать скрин?
 
Автор
К

Коршун

Новичок
Сообщения
58
Репутация
1
Vovsla сказал(а):
Может проще поставить Win на виртуальную машину и с нее сделать скрин?
К сожалению не проще. Скрипт будет запускаться на разных машинах, под разными пользователями.
 
Верх