在Visual Basic中模拟Windows键+L组合键?

4

我希望在Visual Basic中模拟Windows键+L(锁定控制台的快捷键),并将其绑定到一个函数。因此,当调用此函数时,它将锁定控制台。 我能做到吗?


已经有一个VBA标签了,这基本上告诉我们我们需要知道的一切。只要不是VB.NET,你可以像在VB 6中一样在VBA中完成这个操作。 - Cody Gray
与.NET(https://dev59.com/92gt5IYBdhLWcg3wygab)和C/C++(https://dev59.com/F1LTa4cB1Zd3GeqPXR_r)相关的问题,所有答案都完全相同! - Deanna
1个回答

14

模拟热键是错误的方法。你只需要调用LockWorkStation函数。这与按下Ctrl+Alt+Del并选择“锁定计算机”或使用Win+L热键具有相同的效果,唯一的区别是你可以通过代码以编程方式完成操作。

要从VB应用程序调用此函数,你需要编写一个声明,如下所示:

Private Declare Function LockWorkStation Lib "user32.dll" () As Long

你需要将该声明放在模块文件的顶部,即定义任何过程之前。然后,在其中一个过程内,你可以调用该函数。例如:

Private Sub LockComputer()
    LockWorkStation
End Sub

更好的代码应该检查LockWorkStation返回的错误码。返回值为0表示发生错误。在VB中检查Win32错误的标准方式是使用Err.LastDllError,这将为您提供有关出错原因的更多信息。


3
+1 Yup,API是最佳的方法。但是有一个建议。我没有测试过,但是VBA不允许您使用Private Sub Lock(),我相信“Lock”是保留字。也许将其更改为类似于Private Sub LockPC()这样的内容会有所帮助? API是最佳方式,但需要注意的是,在VBA中不能使用关键字"Lock"作为子程序名称,因为它是一个保留词。因此,建议将其更改为类似于Private Sub LockPC()的名称。 - Siddharth Rout
是的,我刚测试了一下。它不允许你使用“Lock”。VB6也不允许你使用它。 - Siddharth Rout
糟糕,这就是我发布未经测试的代码所得到的结果!感谢您提醒。 - Cody Gray
你包装API调用的原因是什么呢?我看不出来。如果你真的想要一个不同的名称,Declare有一个Alias子句。 - Bob77
不,这只是一个示例,展示它被称为普通函数。没有很好的理由将其包装起来。 - Cody Gray

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