【问题标题】:Simulate windowskey+L in visual basic?在visual basic中模拟windowskey+L?
【发布时间】:2012-08-11 03:02:13
【问题描述】:

我想在 Visual Basic 中模拟 WindowsKey + L(锁定控制台的快捷方式)并将其绑定到一个函数。因此,当调用此函数时,它将锁定控制台。 我可以这样做吗?

【问题讨论】:

  • 已经有一个 VBA 标签,它告诉我们几乎所有我们需要知道的东西。只要不是 VB.NET,在 VBA 中的执行方式与在 VB 6 中相同。
  • .NETC/C++ 中的相关问题答案完全相同!

标签: windows winapi vba vb6


【解决方案1】:

模拟热键是错误的方法。您需要做的就是拨打LockWorkStation function。这与按 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 将为您提供更多关于究竟出了什么问题的信息。

【讨论】:

  • + 1 是的,API 是最好的方法。然而一个建议。我没有测试过,但 VBA 不会让你使用Private Sub Lock() 我相信'Lock' 是一个保留字。也许将其更改为 Private Sub LockPC() 之类的内容会有所帮助?
  • 是的,刚刚测试过。它不会让你使用Lock。 VB6 也不会让你使用它。
  • 废话,这就是我发布未经测试的代码所得到的!感谢您的提醒。
  • 是否有任何理由将 API 调用包装在单独的 Sub 或 Function 中?我一个都看不到如果你真的想要一个不同的名字 Declare 有一个 Alias 子句。
  • 不,只是一个示例,表明它像常规函数一样被调用。没有充分的理由结束它。
猜你喜欢
  • 2011-05-12
  • 2011-01-14
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多