【问题标题】:Re-assign/override hotkey (Win + L) to lock windows重新分配/覆盖热键 (Win + L) 以锁定窗口
【发布时间】:2010-09-22 23:56:18
【问题描述】:

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

用例 - 我想在笔记本电脑显示器锁定后立即关闭它。我知道可以锁定和关闭显示器的可执行文件,但我不想更改系统锁定的方式(通过显式运行程序或通过其他快捷方式)。最好将 Win+L 分配给这个可执行文件。

【问题讨论】:

    标签: windows locking keyboard-shortcuts monitor energy


    【解决方案1】:

    您需要设置以下注册表项以完全禁用 Windows 锁定功能:

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

    然后重启电脑。

    这适用于 Win7、Win8 和 Win10

    【讨论】:

    • 这是正确答案。我之前尝试过没有“系统”键,但它不起作用。但是,是的,这个适用于 Win8,以及 Win7。为了方便所有相关人员,我已将 .reg 文件内容粘贴到新答案中。
    • 您可以阅读更多相关信息,并从此处下载准备导入的“reg”文件:howtogeek.com/howto/windows-vista/…
    • 我有一个非常新的问题。我应该将您的 [HKEY-...] 信息保存在带有 .reg 后缀的文件中,然后执行吗?
    • 这个答案救了我的命。
    • 这不是完全禁用锁定工作站吗?
    【解决方案2】:

    Win+L 是系统分配的热键,没有禁用它的选项。这意味着应用程序无法检测到它,除非您使用low-level global keyboard hook (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 在让系统热键被覆盖方面变得更加严格?此外,如果您在 64 位操作系统中尝试此操作,请确保您的 DLL 为 64 位。
    • 我的应用是 64 位的,在 64 位系统上。它可以很好地阻止其他键,但不能阻止 win+l
    • 你是对的。我刚刚在 Win7 x64 上对其进行了测试,似乎 Win+L 是经过特殊处理的(从钩子中返回非 0 不会阻止锁定屏幕)。老实说,我不怪他们这样做。因此,似乎 FrancoisB 建议通过策略禁用锁定是在 Win7+ 中执行此操作的正确方法(也许 Vista 也是如此)。
    【解决方案3】:

    基于注册表的解决方案本身完全禁用锁定系统(即使通过Start 菜单)。

    这是一种方法,实际上提供了一种在没有 Win-L 和弦的情况下锁定计算机的方法。锁定可以通过任务栏上的快捷方式完成,也可以通过按顺序按它们,然后按 Enter

    首先,创建一个可以切换系统锁定并触发锁定本身的批处理文件;执行此操作的说明取自 a forum post:

    • 创建用于打开或关闭系统锁定的 reg-edit 文件。这与 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-edit 脚本以禁用系统锁定。

    • 创建一个批处理文件以使用.reg 文件切换功能:

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

    现在,你可以create a shortcut and pin it to the taskbar

    • 右键单击批处理文件并创建快捷方式。
    • 右键单击新快捷方式,编辑快捷方式属性,将目标更改为cmd.exe /C "&lt;path&gt;\lock.bat",其中&lt;path&gt;lock.bat 文件的完整路径。
    • 现在应该可以将快捷方式固定到任务栏(这在手动更改目标之前不是正确);它可以像往常一样拖到那里。
      • (请注意,将快捷方式固定到任务栏之前,您可能还希望将图标更改为类似挂锁的图标。)

    如上所述,完成上述步骤后,您应该可以使用 WinLEnter锁定计算机> 按顺序(不是作为和弦——尽管请参阅下面的解决方案,使用 Ctrl-Alt-L作为和弦)。这是因为该序列被解释如下:

    • Win -- 调出开始菜单,虽然您实际上不需要等待它加载
    • L -- 搜索自定义锁脚本;在我的机器上,lock.bat 快捷方式始终是第一个 L 结果if,它是我任务栏上唯一以 L 开头的快捷方式。 (在尝试以这种方式锁定您的计算机之前,请验证!)
    • Enter——一旦搜索找到一个项目,它就会被启动——即快捷方式将被调用,您的计算机将被锁定。您确实不需要等待搜索加载;您可以快速依次按WinLEnter然后走开。屏幕不会立即锁定,但应该会在几秒钟内锁定。

    下面是我制作的任务栏快捷方式图片(使用this icon):


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

    在下面的 cmets 中,用户 lub094 建议了一种将快捷键分配给 chord Ctrl-Alt-L (或您想要的任何快捷方式)。我没有花时间对此进行测试,因为我已经重新启用了系统快捷方式,但我认为它可以工作。

    • 使用内置的快捷键创建功能来分配和弦:

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

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

    【讨论】:

    • 这是正确答案。它显示了如何禁用内置热键以及如何创建自己的热键,为文件快捷方式分配一个。就像添加一件事:要能够执行新的热键,您需要某个系统可用文件夹中的快捷方式。我认为它应该在系统环境变量中的文件夹中,这样的文件夹就是库。
    • @lub094 谢谢!我已将该信息添加到答案中。
    • 对于真正的热键,您可以像这样使用 Windows 内置功能:i.imgur.com/T4KYX9k.png?1
    • 为了让它工作,我必须将快捷方式放在开始菜单文件夹“C:\Users\ [user_name]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ [custom_folder]\ “:i.imgur.com/3bro1Pi.png。如果它没有立即开始工作,我发现多次更改热键组合可以解决问题。
    • 值得注意的是,任何需要制作 .reg 文件的人都需要在其文件资源管理器设置中禁用“隐藏已知文件类型的扩展名”设置。
    【解决方案4】:

    看来你不能。

    您可以禁用所有内置 Windows 热键 Win+L 除外 和 Win+U by 对 注册表(这应该适用于所有操作系统 但可能需要重新启动):

    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 也可能有用,没试过。 Source.

    【讨论】:

    • 这与这是由 Winlogon 而非资源管理器注册的事实有关 - 所以这将是查找设置的错误部分。挂钩可用于模拟已注册热键的功能(如本主题和其他地方所述)。
    • 为什么选择 Win+U?如果不使用可访问性,为什么 Microsoft 会强制使用它? :roll:
    【解决方案5】:

    @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
      

    【讨论】:

      【解决方案6】:

      使用适用于 Windows 10 的电动玩具。 您可以选择重新映射快捷方式.. download power toys

      【讨论】:

      • 至少在我的情况下我收到错误消息,我无法映射/到 Win L
      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 2010-09-16
      • 2013-05-10
      • 1970-01-01
      • 2013-12-07
      • 2013-10-19
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多