gpt4 book ai didi

vba - 如何使用 VBA 从 64 位 Windows Vista 调用 ActivateKeyboardLayout

转载 作者:行者123 更新时间:2023-12-02 12:21:29 24 4
gpt4 key购买 nike

在 XP 下运行 VBA 我能够调用 ActivateKeyboardLayout 将我的输入语言从英语切换到另一种语言。但是,这在 Vista64 下不再起作用。

有什么建议或解决方法吗?

过去在 XP 下工作的代码类似于以下内容:

Private Declare Function ActivateKeyboardLayout Lib "user32" ( _
ByVal HKL As Long, ByVal flags As Integer) As Integer
Const aklPUNJABI As Long = &H4460446
ActivateKeyboardLayout aklPUNJABI, 0

有人建议尝试

Public Declare Function ActivateKeyboardLayout Lib "user32" ( _
ByVal nkl As IntPtr, ByVal Flags As uint) As Integer

当我尝试此操作时,我收到错误消息:

变量使用 Visual Basic 不支持的自动化类型

最佳答案

您对ActivateKeyboardLayout 的声明实际上是不正确的。对于 32 位系统,您的代码应如下所示:

Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, _
ByVal flags As Long) As Long

Const aklPUNJABI As Long = &H4460446
Dim oldLayout as Long
oldLayout = ActivateKeyboardLayout(aklPUNJABI, 0)
If oldLayout = 0 Then
'Oops an error'
Else
'Save old layout for later restore?'
End If

在这种情况下,64 位操作系统有点转移注意力。由于您正在运行 VBA 应用程序,因此无论操作系统如何,它都必须作为 32 位应用程序运行。我怀疑您的问题可能是在您的 Vista 系统上未加载您想要的旁遮普键盘布局。 ActivateKeyboardLayout 仅适用于激活已加载的键盘布局。由于某种原因,该 API 的设计者认为由于键盘布局不存在而导致的失败不是错误,因此未设置 LastDllError。对于这种情况,您可能需要考虑使用 LoadKeyboardLayout。

编辑:要仔细检查您尝试获取的键盘布局是否确实已加载,您可以使用以下命令:

Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal size As Long, _
ByRef layouts As Long) As Long

Dim numLayouts As Long
Dim i As Long
Dim layouts() As Long

numLayouts = GetKeyboardLayoutList(0, ByVal 0&)
ReDim layouts(numLayouts - 1)
GetKeyboardLayoutList numLayouts, layouts(0)

Dim msg As String
msg = "Loaded keyboard layouts: " & vbCrLf & vbCrLf

For i = 0 To numLayouts - 1
msg = msg & Hex(layouts(i)) & vbCrLf
Next

MsgBox msg

关于vba - 如何使用 VBA 从 64 位 Windows Vista 调用 ActivateKeyboardLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com