重新分配/覆盖热键(Win + L)以锁定 Windows

27

是否可以将Win+L热键重新分配给其他可执行文件/快捷方式?

应用场景 - 当我的笔记本电脑锁定时,我想立即关闭显示器。我知道有一个可执行文件可以锁定并关闭显示器,但我不想改变系统锁定的方式(通过显式运行程序或其他快捷方式)。最好能将Win+L分配给这个可执行文件。

6个回答

25
您需要设置以下注册表键来完全禁用Windows锁定功能:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableLockWorkstation"=dword:00000001

然后重新启动计算机。

此方法适用于Win7、Win8和Win10。


这是正确的答案。我之前尝试过没有“System”键,但那样行不通。但是,这个可以在Win8和Win7上使用。为了方便所有相关人员,我已经将.reg文件内容粘贴到了一个新答案中。 - Brent Faust
2
您可以在此处阅读更多信息,并下载一个“reg”文件以供导入:http://www.howtogeek.com/howto/windows-vista/disableenable-lock-workstation-functionality-windows-l/ - Brad Parks
1
这个答案救了我的命。 - Zen
3
这难道不完全禁用了工作站的锁定功能吗? - Kyle Strand
1
请记住,这不仅会禁用 win+l,而且会完全禁用锁定功能。它将禁用“开始 > 关闭”中的锁定、恢复/唤醒时的锁定等。 - dhulihan
显示剩余2条评论

14

该基于注册表的解决方案本身完全禁用了锁定系统(即使通过开始菜单也无法锁定)。

下面是一种实际提供了一种在不使用Win-L组合键的情况下锁定计算机的方法。可以通过任务栏上的快捷方式或按顺序按下它们,然后再按Enter来锁定。

首先,创建一个批处理文件,可以切换系统锁定并触发锁定本身;此操作的说明取自论坛帖子

  • 创建可打开或关闭系统锁定的注册表编辑文件。这与Brent Foust的回答相同。

    • 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文件来切换该功能:

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

���在,你可以创建一个快捷方式并将其固定到任务栏

  • 右键单击批处理文件并创建一个快捷方式。
  • 右键单击新的快捷方式,编辑快捷方式属性,并将目标更改为cmd.exe /C "<path>\lock.bat",其中<path>是指向lock.bat文件的完整路径。
  • 在手动更改目标之前,这个快捷方式无法被固定到任务栏(注意:需要先进行上述编辑操作);它可以像常规文件一样拖到任务栏上。
    • (请注意,在将快捷方式固定到任务栏之前,您可能还想将图标更改为类似于挂锁的东西。)

如上所述,完成上述过程后,您应该能够使用按键序列WinLEnter锁定计算机(注意:不要以和弦的形式按下)。这是因为这个序列会被解释为:

  • Win - 弹出开始菜单,尽管实际上您并不需要等待它加载
  • L - 搜索自定义锁定脚本;在我的机器上,如果只有一个以L开头的任务��快捷方式,那么lock.bat快捷方式将始终是第一个搜索结果。(在尝试这种方法锁定计算机之前,请验证此事项!)
  • Enter - 一旦搜索找到一个项目,就会启动它--也就是说,将调用快捷方式,计算机将被锁定。您不需要等待搜索加载;您可以快速按下WinLEnter并离开。屏幕不会立即锁定,但应该会在几秒钟内锁定。

以下是我制作的任务栏快捷方式的图片(使用此图标):

lock.bat taskbar shortcut


编辑:使用和弦,例如Ctrl-Alt-L

在下方评论中,用户lub094建议一种将快捷方式分配给和弦Ctrl-Alt-L(或其他您喜欢的快捷方式)的方法。由于我已重新启用了系统快捷键,因此我没有时间测试它,但我认为它有效。

  • 使用内置的快捷方式创建功能来指定和弦:

    输入图像描述

  • 将快捷方式本身放置在“开始”菜单文件夹中:

    "C:\Users\ [user_name]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ [custom_folder]\"
    

1
这是正确答案。它显示了如何禁用内置热键以及如何创建自己的热键,并为文件快捷方式分配一个热键。还想补充一件事:要执行新的热键,您需要将快捷方式放在某个系统可用的文件夹中。我认为它应该在系统环境变量中的某个文件夹中,这些文件夹是库。 - lub094
@lub094 谢谢!我已经将这些信息添加到答案中。 - Kyle Strand
1
为了使其正常工作,我不得不将快捷方式放置在开始菜单文件夹“C:\ Users \ [user_name] \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ [custom_folder] \”中:http://i.imgur.com/3bro1Pi.png。 如果它不能立即开始工作,我发现多次更改热键组合可以解决问题。 - lub094
@lub094 谢谢你。我会在有空的时候测试一下并相应地重写我的答案。 - Kyle Strand
1
值得注意的是,任何需要制作.reg文件的人都需要在文件资源管理器设置中禁用“隐藏已知文件类型的扩展名”选项。 - Shadoninja
显示剩余6条评论

13

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)无法捕获热键事件。

@elmarco,是的,在XP中它可以工作。也许Vista/7在允许系统热键被覆盖方面变得更加严格了?此外,请确保您的DLL是64位的,如果您正在尝试在64位操作系统中使用它。 - efotinis
我的应用是64位,在64位系统上运行。它可以很好地阻止其他键,但无法阻止Win + L。 - elmarco
2
你说得对。我刚在Win7 x64上测试了一下,似乎Win+L被特殊处理了(从钩子返回非0值并不会阻止锁屏)。老实说,我不怪他们这样做。因此,看起来FrancoisB建议通过策略禁用锁定是在Win7+(以及可能是Vista)中正确的方法。 - efotinis

3

看起来你不能这样做。

你可以通过对注册表进行以下更改来禁用所有内置的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)

但你可以尝试使用Tweak UI。在资源管理器树视图项目下,取消选中“启用Windows+X”热键。Hoekey 也可能有效,但我还没有尝试过。来源


这与Winlogon注册有关,而不是Explorer - 因此这将是寻找设置的错误部分。可以使用钩子来模拟已注册热键的功能(如本主题和其他地方所述)。 - 0xC0000022L
为什么要Win+U?如果不使用辅助功能,那为什么Microsoft强制进行无障碍设计呢?:roll: - Synetech

3

@FrancoisB的方法适用于Win8和Win7。要自动化解决方案:

  1. Create a text file with the .reg suffix (DisableWinL.reg, for example)

  2. Paste the following content and save the file:

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
    "DisableLockWorkstation"=dword:00000001
    
  3. Open that file with RegEdit (double-click should work) to execute the change.

    This file can be copied to a new machine to repeat the process. And another one named something like "EnableWinL.reg" could be created that re-enables the Win+L key:

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

0

使用Windows 10的Power Toys。 在那里您可以重新映射快捷键.. 下载Power Toys


在我的情况下,我会收到错误消息,无法映射/到Win L。 - LeoR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接