Переопределить / переопределить горячую клавишу (Win + L) для блокировки окон - PullRequest
22 голосов
/ 19 ноября 2008

Можно ли переназначить горячую клавишу Win + L другому исполняемому файлу / ярлыку?

Вариант использования - я хочу выключить монитор моего ноутбука, как только он заблокирован. Мне известен исполняемый файл, который может блокировать и выключать монитор, но я не хочу менять способ блокировки системы (запустив программу явно или с помощью какого-либо другого ярлыка). Было бы лучше, если бы Win + L мог быть назначен этому исполняемому файлу.

Ответы [ 5 ]

21 голосов
/ 12 июня 2012

Вам необходимо установить следующий раздел реестра, чтобы полностью отключить функцию блокировки Windows:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System] "DisableLockWorkstation"=dword:00000001

И перезагрузите компьютер.

Это работает на Win7, Win8 и Win10

10 голосов
/ 25 ноября 2008

Win + L - назначенная системой горячая клавиша, и ее нельзя отключить. Это означает, что приложение не может обнаружить его, если только вы не используете глобальный хук клавиатуры низкого уровня (WH_KEYBOARD_LL). Это работает в XP SP3; не проверял это в Vista, хотя:

LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wparam, LPARAM lparam) {
    KBDLLHOOKSTRUCT& kllhs = *(KBDLLHOOKSTRUCT*)lparam;
    if (code == HC_ACTION) {
        // Test for an 'L' keypress with either Win key down.
        if (wparam == WM_KEYDOWN && kllhs.vkCode == 'L' && 
            (GetAsyncKeyState(VK_LWIN) < 0 || GetAsyncKeyState(VK_RWIN) < 0))
        {
            // Place some code here to do whatever you want.
            // ...

            // Return non-zero to halt message propagation
            // and prevent the Win+L hotkey from getting activated.
            return 1;
        }
    }
    return CallNextHookEx(0, code, wparam, lparam);
}

Обратите внимание, что вам нужен низкоуровневый крючок для клавиатуры. обычный хук клавиатуры (WH_KEYBOARD) не будет перехватывать события горячих клавиш.

8 голосов
/ 16 января 2015

Решение на основе реестра само по себе полностью отключает блокировку системы (даже через меню Start).

Вот метод, который фактически обеспечивает способ блокировки компьютера без аккорда win-L. Блокировка может быть выполнена с помощью ярлыка на панели задач или путем последовательного нажатия на них, после чего следует Enter.

Сначала создайте командный файл, который может переключать блокировку системы и запускать саму блокировку; инструкции для этого взяты из сообщения форума :

  • Создание файлов reg-edit для включения или выключения блокировки системы. Это то же самое, что и в ответе Брента Фауста.

    • В DisableLockWorkstation.reg:

       Windows Registry Editor Version 5.00
       [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
       "DisableLockWorkstation"=dword:00000001
      
    • В EnableLockWorkstation.reg:

        Windows Registry Editor Version 5.00
      
      
        [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
        "DisableLockWorkstation"=-
      
  • Запустите сценарий reg-edit для , отключив блокировку системы.

  • Создание командного файла для переключения функции с использованием файлов .reg:

    regedit /S EnableLockWorkstation.reg
    rundll32.exe user32.dll,LockWorkStation
    regedit /S DisableLockWorkstation.reg
    

Теперь вы можете создать ярлык и закрепить его на панели задач :

  • Щелкните правой кнопкой мыши командный файл и создайте ярлык.
  • Щелкните правой кнопкой мыши новый ярлык, измените свойства ярлыка и измените цель на cmd.exe /C "<path>\lock.bat", где <path> - полный путь к файлу lock.bat.
  • Теперь ярлык должен быть прикреплен к панели задач (это , а не true до изменения цели вручную); его можно перетащить туда, как обычно.
    • (Обратите внимание, что вы также можете изменить значок на что-то вроде замка до закрепления ярлыка на панели задач.)

Как уже упоминалось выше, после того, как вы выполнили вышеуказанную процедуру, вы сможете заблокировать компьютер, используя Win, L, Enter в последовательности ( не в качестве - хотя см. ниже решение, использующее Ctl - Alt - L в качестве аккорда). Это потому, что эта последовательность интерпретируется следующим образом: * Win - вызывает меню «Пуск», хотя вам не нужно ждать, пока оно загрузится * L - поиск пользовательского сценария блокировки; на моей машине ярлык lock.bat всегда был первым L результатом , если это был единственный ярлык на панели задач, начинающийся с L. ( Проверьте это , прежде чем пытаться заблокировать компьютер таким образом!) * Enter - как только поиск найдет элемент, он будет запущен - т.е. будет вызван ярлык, и ваш компьютер будет заблокирован. Вы не должны ждать загрузки поиска; Вы можете быстро нажать последовательно Win, L, Enter и уйти. Экран не будет заблокирован сразу, но он должен заблокироваться в течение нескольких секунд.

Ниже приведено изображение ярлыка панели задач, который я сделал (используя этот значок ):

enter image description here


РЕДАКТИРОВАТЬ: Использование аккорда, например, Ctl - Alt - L

В комментариях ниже пользователь lub094 предлагает способ назначения ярлыка для аккорда Ctl - Alt - L (или любого другого ярлыка, который вы хотите). Я не потратил время, чтобы проверить это, потому что я снова включил ярлык системы, но я предполагаю, что он работает.

  • Используйте встроенную функцию создания ярлыков для назначения аккорда:

enter image description here

  • Поместите ярлык в папку «Пуск»:

    "C:\Users\ [user_name]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ [custom_folder]\"
    
3 голосов
/ 11 февраля 2013

Метод @FrancoisB работает для Win8 и Win7. Для автоматизации решения:

  1. Создать текстовый файл с суффиксом .reg (например, DisableWinL.reg)

  2. Вставьте следующее содержимое и сохраните файл:

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System] "DisableLockWorkstation"=dword:00000001

  3. Откройте этот файл с помощью RegEdit (двойной щелчок должен сработать), чтобы выполнить изменение.

Этот файл можно скопировать на новый компьютер, чтобы повторить процесс. Можно создать еще один файл с именем «EnableWinL.reg», который снова активирует клавишу Win + L: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System] "DisableLockWorkstation"=dword:00000000

3 голосов
/ 19 ноября 2008

Похоже, вы не можете.

Вы можете отключить все встроенные Windows горячие клавиши кроме Win + L и Win + U внести следующие изменения в реестр (это должно работать на всех ОС но перезагрузка, вероятно, требуется):

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer, NoWinKeys REG_DWORD 0x00000001 (1)

(http://www.autohotkey.com/docs/misc/Override.htm)

Но вы можете попробовать использовать твик-интерфейс. Под элементом дерева просмотра Explorer снимите флажки с «Горячих клавиш Windows + X». Мотыга тоже может сработать, не пробовал. Источник .

...