实现了一个基于 AutoHotkey (AHK) 的屏幕保护程序 (screensaver)

 

注意,使用此脚本后。如果不输入正确的密码,任务管理器会被禁用。需要到注册表将HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System 设置为0才能解锁

Plain text
复制到剪贴板
Open code in new window
EnlighterJS 3 Syntax Highlighter
; 改pwd = [password goes here]成自己的密码,输入密码后按回车关闭屏幕保护
; 注意,使用此脚本后。如果不输入正确的密码,任务管理器会被禁用。
; 需要到注册表将HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System 设置为0才能解锁
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=73108
; ------------------------------
; SCREENSAVER
; This AutoHotkey script creates a screensaver that displays a photo, along with the user's name,
; e-mail address, and telephone number. The user must type a password to exit the script.
; The program waits for invisible keyboard input from the user. A maximum number of attempts is specified.
; If the maximum number of attempts is exceeded, the script will lock the workstation.
; The Windows Task Manager will be disabled while the screensaver is active.
; The password is stored in plain text here, so this script file should be protected against unauthorized access.
; The script will not steal the focus if lost. If the focus is lost, click on the screensaver before entering the password.
; This script can be compiled with Ahk2Exe.
; In the script below, the user can modify placeholders designated with brackets.
; By Michael Weiner on 29 February 2020
; Copyright 2020 Michael Weiner
; ------------------------------
; Personal information: modify placeholders in brackets
name = [name goes here]
email = [e-mail address goes here]
phone = [phone number goes here]
photo = [full path to photo goes here]
icon = [full path to icon goes here] ; This is the tray icon, though the screensaver will actually cover the tray.
pwd = [password goes here] ; To exit this script, user should type this, and then press ENTER.
; ------------------------------
; Variables below can also be modified as needed
maxTries := 3 ; Number of password attempts before locking the workstation
hpad := 70 ; Horizontal padding between photo and text
vpad := 30 ; Vertical padding among name, e-mail address, and phone number
fontName = Arial
fontSize := 30
textColor = White
bkg = 000000 ; Background color (000000 = black)
formWidth := 0 ; Width of zero will make the password entry form invisible
onTop = True ; True if screensaver should stay on top of other windows
taskManager = True ; True if Windows Task Manager should be disabled while screensaver is active
; ------------------------------
; Variables below should not be modified
tries := 0 ; Keep track of the number of password attempts
enable := 0
disable := 1
; ------------------------------
; Do some initial setup
If (pwd = "[password goes here]")
{
MsgBox, 48, Error, 尚未设置密码。正在中止。
ExitApp
}
If FileExist(icon)
Menu, Tray, Icon, %icon% ; Set the tray icon
If (onTop = "True")
Gui +AlwaysOnTop -Caption -MinimizeBox -MaximizeBox ; Keep the screensaver on top of other windows
Gui, Color, %bkg%, %bkg% ; Set up the background colors
; Define the password input form
Gui, Font, s10, %fontName%
Gui, Add, Edit, x90 y90 w%formWidth% Lowercase Password ventry ; Text entry field
Gui, Add, Button, x+10 default w%formWidth%, OK ; Pressing ENTER will run subroutine "ButtonOK"
; Define the photo
If FileExist(photo)
Gui, Add, Picture, x80 y80, %photo% ; Define the photo to be displayed
; Define the text color, user's name, e-mail address, and phone number to be displayed
Gui, Font, s%fontSize%, %fontName%
Gui, Add, Text, x+%hpad% y130 c%textColor%, %name%
Gui, Add, Text, y+%vpad% c%textColor%, %email%
Gui, Add, Text, y+%vpad% c%textColor%, Ph %phone%
; Finish
set(taskManager,disable)
MouseMove, 220, 570
Gui, Show, Maximize ; Show the screensaver using the definitions above
focus()
Return
; ============================================
ButtonOK:
Gui, Submit, NoHide ; Save the user's entry in variable "entry"
tries++
If (tries >= maxTries) AND (entry <> pwd)
{
DllCall("LockWorkStation")
Sleep, 3000
}
If (tries >= maxTries) OR (entry = pwd)
{
set(taskManager,enable)
ExitApp
}
focus()
Return
; --------------------------------------------
focus() ; Clear, and focus on, the password entry field
{
GuiControl,, entry ; Clear the password entry field
GuiControl, Focus, entry
}
; --------------------------------------------
set(tm,status)
{
If (tm = "True")
RegWrite, REG_DWORD, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableTaskMgr, %status%
}
; 改pwd = [password goes here]成自己的密码,输入密码后按回车关闭屏幕保护 ; 注意,使用此脚本后。如果不输入正确的密码,任务管理器会被禁用。 ; 需要到注册表将HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System 设置为0才能解锁 ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=73108 ; ------------------------------ ; SCREENSAVER ; This AutoHotkey script creates a screensaver that displays a photo, along with the user's name, ; e-mail address, and telephone number. The user must type a password to exit the script. ; The program waits for invisible keyboard input from the user. A maximum number of attempts is specified. ; If the maximum number of attempts is exceeded, the script will lock the workstation. ; The Windows Task Manager will be disabled while the screensaver is active. ; The password is stored in plain text here, so this script file should be protected against unauthorized access. ; The script will not steal the focus if lost. If the focus is lost, click on the screensaver before entering the password. ; This script can be compiled with Ahk2Exe. ; In the script below, the user can modify placeholders designated with brackets. ; By Michael Weiner on 29 February 2020 ; Copyright 2020 Michael Weiner ; ------------------------------ ; Personal information: modify placeholders in brackets name = [name goes here] email = [e-mail address goes here] phone = [phone number goes here] photo = [full path to photo goes here] icon = [full path to icon goes here] ; This is the tray icon, though the screensaver will actually cover the tray. pwd = [password goes here] ; To exit this script, user should type this, and then press ENTER. ; ------------------------------ ; Variables below can also be modified as needed maxTries := 3 ; Number of password attempts before locking the workstation hpad := 70 ; Horizontal padding between photo and text vpad := 30 ; Vertical padding among name, e-mail address, and phone number fontName = Arial fontSize := 30 textColor = White bkg = 000000 ; Background color (000000 = black) formWidth := 0 ; Width of zero will make the password entry form invisible onTop = True ; True if screensaver should stay on top of other windows taskManager = True ; True if Windows Task Manager should be disabled while screensaver is active ; ------------------------------ ; Variables below should not be modified tries := 0 ; Keep track of the number of password attempts enable := 0 disable := 1 ; ------------------------------ ; Do some initial setup If (pwd = "[password goes here]") { MsgBox, 48, Error, 尚未设置密码。正在中止。 ExitApp } If FileExist(icon) Menu, Tray, Icon, %icon% ; Set the tray icon If (onTop = "True") Gui +AlwaysOnTop -Caption -MinimizeBox -MaximizeBox ; Keep the screensaver on top of other windows Gui, Color, %bkg%, %bkg% ; Set up the background colors ; Define the password input form Gui, Font, s10, %fontName% Gui, Add, Edit, x90 y90 w%formWidth% Lowercase Password ventry ; Text entry field Gui, Add, Button, x+10 default w%formWidth%, OK ; Pressing ENTER will run subroutine "ButtonOK" ; Define the photo If FileExist(photo) Gui, Add, Picture, x80 y80, %photo% ; Define the photo to be displayed ; Define the text color, user's name, e-mail address, and phone number to be displayed Gui, Font, s%fontSize%, %fontName% Gui, Add, Text, x+%hpad% y130 c%textColor%, %name% Gui, Add, Text, y+%vpad% c%textColor%, %email% Gui, Add, Text, y+%vpad% c%textColor%, Ph %phone% ; Finish set(taskManager,disable) MouseMove, 220, 570 Gui, Show, Maximize ; Show the screensaver using the definitions above focus() Return ; ============================================ ButtonOK: Gui, Submit, NoHide ; Save the user's entry in variable "entry" tries++ If (tries >= maxTries) AND (entry <> pwd) { DllCall("LockWorkStation") Sleep, 3000 } If (tries >= maxTries) OR (entry = pwd) { set(taskManager,enable) ExitApp } focus() Return ; -------------------------------------------- focus() ; Clear, and focus on, the password entry field { GuiControl,, entry ; Clear the password entry field GuiControl, Focus, entry } ; -------------------------------------------- set(tm,status) { If (tm = "True") RegWrite, REG_DWORD, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableTaskMgr, %status% }
; 改pwd = [password goes here]成自己的密码,输入密码后按回车关闭屏幕保护

; 注意,使用此脚本后。如果不输入正确的密码,任务管理器会被禁用。
; 需要到注册表将HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System 设置为0才能解锁

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=73108
; ------------------------------
; SCREENSAVER
; This AutoHotkey script creates a screensaver that displays a photo, along with the user's name,
; e-mail address, and telephone number. The user must type a password to exit the script.
; The program waits for invisible keyboard input from the user. A maximum number of attempts is specified.
; If the maximum number of attempts is exceeded, the script will lock the workstation.
; The Windows Task Manager will be disabled while the screensaver is active.
; The password is stored in plain text here, so this script file should be protected against unauthorized access.
; The script will not steal the focus if lost. If the focus is lost, click on the screensaver before entering the password.
; This script can be compiled with Ahk2Exe.
; In the script below, the user can modify placeholders designated with brackets.
; By Michael Weiner on 29 February 2020
; Copyright 2020 Michael Weiner
; ------------------------------
; Personal information: modify placeholders in brackets
name = [name goes here]
email = [e-mail address goes here]
phone = [phone number goes here]
photo = [full path to photo goes here]
icon = [full path to icon goes here] ; This is the tray icon, though the screensaver will actually cover the tray.
pwd = [password goes here] ; To exit this script, user should type this, and then press ENTER.
; ------------------------------
; Variables below can also be modified as needed
maxTries := 3 ; Number of password attempts before locking the workstation
hpad := 70 ; Horizontal padding between photo and text
vpad := 30 ; Vertical padding among name, e-mail address, and phone number
fontName = Arial
fontSize := 30
textColor = White
bkg = 000000 ; Background color (000000 = black)
formWidth := 0 ; Width of zero will make the password entry form invisible
onTop = True ; True if screensaver should stay on top of other windows
taskManager = True ; True if Windows Task Manager should be disabled while screensaver is active
; ------------------------------
; Variables below should not be modified
tries := 0 ; Keep track of the number of password attempts
enable := 0
disable := 1
; ------------------------------

; Do some initial setup
If (pwd = "[password goes here]")
{
 MsgBox, 48, Error, 尚未设置密码。正在中止。
 ExitApp
}
If FileExist(icon)
 Menu, Tray, Icon, %icon% ; Set the tray icon
If (onTop = "True")
 Gui +AlwaysOnTop -Caption -MinimizeBox -MaximizeBox ; Keep the screensaver on top of other windows
Gui, Color, %bkg%, %bkg% ; Set up the background colors

; Define the password input form
Gui, Font, s10, %fontName%
Gui, Add, Edit, x90 y90 w%formWidth% Lowercase Password ventry ; Text entry field
Gui, Add, Button, x+10 default w%formWidth%, OK ; Pressing ENTER will run subroutine "ButtonOK"

; Define the photo
If FileExist(photo)
 Gui, Add, Picture, x80 y80, %photo% ; Define the photo to be displayed

; Define the text color, user's name, e-mail address, and phone number to be displayed
Gui, Font, s%fontSize%, %fontName%
Gui, Add, Text, x+%hpad% y130 c%textColor%, %name%
Gui, Add, Text, y+%vpad% c%textColor%, %email%
Gui, Add, Text, y+%vpad% c%textColor%, Ph %phone%

; Finish
set(taskManager,disable)
MouseMove, 220, 570
Gui, Show, Maximize ; Show the screensaver using the definitions above
focus()
Return
; ============================================
ButtonOK:
Gui, Submit, NoHide ; Save the user's entry in variable "entry"
tries++
If (tries >= maxTries) AND (entry <> pwd)
{
 DllCall("LockWorkStation")
 Sleep, 3000
}
If (tries >= maxTries) OR (entry = pwd)
{
 set(taskManager,enable)
 ExitApp
}
focus()
Return
; --------------------------------------------
focus() ; Clear, and focus on, the password entry field
{
GuiControl,, entry ; Clear the password entry field
GuiControl, Focus, entry
}
; --------------------------------------------
set(tm,status)
{
If (tm = "True")
 RegWrite, REG_DWORD, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableTaskMgr, %status%
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。