Как переназначить программу для блокировки Windows (Win+L)
Я пытаюсь переназначить WinLock на что-то новое. В основном я хочу удалить Win+L для блокировки Windows и добавить Win+L, чтобы открыть определенную программу, которая будет открыта. Любая помощь? Благодарю.
PS: в настоящее время я использую #L::Run "C:\Program Files\program.exe", чтобы открыть программу, но она также блокирует рабочую станцию. Я нашел способ в реестре отключить функцию Win+L для блокировки Windows, но я не хочу редактировать реестр, поэтому мне интересно, если это можно сделать с помощью autohotkey?
1 ответ
AHK не может перехватить эти ярлыки Windows. Если вы не хотите редактировать значения реестра, я не думаю, что есть способ сделать это. Значение реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System: DisableLockWorkstation
который, если 1 запрещает блокировку системы полностью, с или без ярлыка, и с 0 блокировкой разрешено, и ярлык Win+L заблокирует систему независимо от того, что пытается ее перехватить. Прокомментированный (для тех, кто ищет работающее решение Win+L, но не знает AHK) код:
С редактированием реестра:
; WARNING: Programs that use User32\LockWorkStation (i.e. programmatically locking the operating system) may not work correctly!
; This includes Windows itself (i.e. using start menu or task manager to lock will also not work).
; Script changes Win-L to show a msgbox and Ctrl-Alt-L to lock windows
; The following 3 code lines are auto-executed upon script run, the return line marks an end to the auto-executed code section.
; Register user defined subroutine 'OnExitSub' to be executed when this script is terminating
OnExit, OnExitSub
; Disable LockWorkStation, so Windows doesn't intercept Win+L and this script can act on that key combination
SetDisableLockWorkstationRegKeyValue( 1 )
return
#l::
MsgBox, Win-L was pressed! ; Arbitrary code here
return
^!l::
; Ctrl-Alt-L
; Temporary enable locking
SetDisableLockWorkstationRegKeyValue( 0 )
; Lock
DllCall( "User32\LockWorkStation" )
; Disable locking again
SetDisableLockWorkstationRegKeyValue( 1 )
return
OnExitSub:
; Enable LockWorkStation, because this script is ending (so other applications aren't further disturbed)
SetDisableLockWorkstationRegKeyValue( 0 )
ExitApp
return
SetDisableLockWorkstationRegKeyValue( value )
{
RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Policies\System, DisableLockWorkstation, %value%
}