1

Я пытаюсь переназначить WinLock на что-то новое. В основном я хочу удалить Win+L, чтобы заблокировать Windows, и добавить Win+L, чтобы открыть определенную программу, которая будет открыта. Любая помощь ? Благодарю.

PS: в настоящее время я использую #L:: Run «C:\Program Files\program.exe», чтобы открыть программу, но она также блокирует рабочую станцию. Я нашел способ в реестре отключить функцию Win+L для блокировки Windows, но я не хочу редактировать реестр, поэтому мне интересно, можно ли это сделать с помощью autohotkey?

1 ответ1

4

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%
  }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .