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

2024-01-24

在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 VBA 从 64 位 Windows Vista 调用 ActivateKeyboardLayout 的相关文章

  • 在 Firefox 中使用 Javascript 检测键盘布局

    有没有办法在 Firefox 中检测客户端的键盘布局 我知道 Chrome 的答案是肯定的 请参阅https developer mozilla org en US docs Web API Navigator keyboard https
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在 *ngFor 循环内使用 Angular i18n 和 Angular 5

    我想在模板中的 ngFor Loop 内使用动态翻译 如下所示
  • 从 MS Access 调用存储过程会导致错误 3146

    当我使用下面所示的代码从 MS Access 前端调用 SQL Server 存储过程时 它停止运行并抛出运行时错误 3146 这个存储过程在 SQL Server 中工作正常 但是当我从 MS Access 运行时 它首先工作 但突然停止
  • Excel 2013 数据透视表不会更改当前页面,除非手动导航到

    我们有一小段 VBA 代码 多年来一直完美运行 本质上是 Me PivotTables APivot PivotFields AField CurrentPage Some text 这种方法一直有效 直到 Excel 2013 该行将失败
  • 通过 Excel / VBA 调用 DLL 中的 C++ 函数在传递双参数时生成异常

    我试图通过 DLL 在 Excel VBA 中使用 C C 静态函数 我在 VS17 中调试时遇到异常 我怀疑这是参数传递方式的问题 它是双精度 EXCEL EXE 中 0x00007FFA28BBA14F kernel32 dll 处抛出
  • 使用 VBA 将 Excel 电子表格中嵌入的 Word 文档保存到磁盘

    我们有一个 Excel 电子表格 当前使用存储在公司 LAN 上的 Word 模板生成报告 这对于内部用户来说效果很好 但对于没有连接到 LAN 的任何人来说就不行了 例如 笔记本电脑用户 管理层不希望将模板作为单独的文件分发给外部用户 而
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 如何隐藏组合框下拉列表中的列?

    我正在 Excel 用户窗体中构建一个 ComboBox 该用户窗体从 Access 表中获取其行 我想在下拉列表中向用户显示多个文本字段 但从 ComboBox 返回的值应该是与用户选择的行关联的 ID 号 即 ID 列是绑定列 但我不想
  • 无法删除 Microsoft Access 2003 中的主 -> 子子表单链接

    我在删除访问子报表数据表单中的主 gt 子链接字段时遇到问题 我尝试了各种方法来删除它们 使用子报表的属性窗口以及链接向导 我还从数据库中删除了子报表 然后将现有对象重新导入到新的访问实例中 一旦我重新添加子表单并将其命名为相同的名称 链接
  • 如何将 gettext 字典中的术语输入 JavaScript?

    我正在尝试使用 php 和 javascript jquery 开发一个支持多种语言的网站 我正在尝试获得以下东西 高效 我需要尽可能减少这个操作的后端处理 可扩展 向翻译添加新字符串必须简单实用 问题是 我的 javascript 代码正
  • 循环浏览文件夹中的工作簿

    我正在尝试从文件夹中的所有工作簿复制某些单元格 下面的代码仅循环遍历第一个文件 VBA 新手 欢迎任何帮助 提前致谢 Sub Get Data Dim Directory As String Dim Filename As String D
  • 防止在单元格中更改行时重新格式化字符

    我有一个带有格式化文本的单元格 其中包含我想要用行更改替换的某个子字符串 子字符串是带有方括号的 enterkey 这是这个问题的一个变体在 Excel 中将 HTML 标记 替换为 Alt Enter https stackoverflo
  • 如何从另一个工作簿(excel)复制数据?

    我已经有一个可以创建工作表和其他一些东西的宏 创建工作表后 我是否想调用另一个宏 将数据从第二个 Excel 其打开 复制到第一个活动 Excel 文件 首先 我想复制到标题 但我无法让它工作 不断出现错误 Sub CopyData she
  • 将整个工作表复制到 Excel 2010 中的新工作表

    我发现了类似的问题 涉及复制一个工作簿中的整个工作表并将其粘贴到另一个工作簿 但我感兴趣的是简单地复制整个工作表并将其粘贴到同一工作簿中的新工作表 我正在将 2003 xls 文件转换为 2010 xlsm 用于在工作表之间复制和粘贴的旧方
  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • 将不连续范围从一张纸复制到另一张纸

    VBA 新手 也是第一次发帖 可能会问一个非常基本的问题 然而 我在互联网上 或在我拥有的参考书中 没有找到答案 所以我很困惑 如何将一张纸中的一堆间隔开的列放入另一张纸中 但没有间隙 例如 我想从这样的工作表中复制标记为 x 的单元格 x
  • VBA 按用户范围选择排序

    在过去的三天里我一直在为这个问题苦苦挣扎 所以请帮忙 我想做的是当我运行 Macro1 时 为了论证 将弹出窗口以选择应排序的单元格范围 通过选择的最后一列 或第五列 对这些进行排序 从最低数字到最高数字 这里的问题是所选区域每次都会改变
  • ReDim 保留“下标超出范围”

    我正在尝试将数据从 2 个双精度数组移动到 2 个不同的双精度数组 我不确定大小是多少 因为我正在从第一个数组中随机抽取样本并将其放入第二个数组中 当我添加 ReDim Preserve 行时 出现下标超出范围错误 Function Cre

随机推荐

  • Python 和 mySQLdb 错误:OperationalError: (1054,“‘where 子句’中的未知列”)

    大家好 我收到一个错误 操作错误 1054 where 子句 中未知列 XX 其中XX是下面代码中CLASS的值 conn MySQLdb connect host localhost user user passwd pass db db
  • IIS URL 重写

    好吧 这让我发疯 我正在尝试像这样重写我的网址 Now http www somedomain com Somepage aspx http www somedomain com AnotherPage aspx Desired http
  • 在append()上做一些事情

    当元素附加到 DOM 时是否可以添加某种事件 处理程序 click change keyup 等等 我需要在附加元素后立即获取其高度 然后将高度设置为另一个元素 您可以覆盖默认的追加方法并使其触发自定义追加事件 然后将处理程序绑定到该事件的
  • 用于读取电子邮件的 PHP 库

    我目前使用 SwiftMailer 库send电子邮件 但不幸的是它只能发送 不能接收 我想知道 是否有一个类似的库可以通过 IMAP 连接到电子邮件帐户并阅读电子邮件 IE 使我能够循环浏览电子邮件 我知道这里有一组 PHP IMAP 函
  • 托管 C# 应用程序需要 64 位 SQLite DLL

    我正在尝试将 SQLite 嵌入到我的便携式 C NET 2 0 应用程序中 而不是将 DLL 文件包含在分发文件夹中 但是 要嵌入 SQLite 我无法使用 PHXSoftware 提供的混合模式库 相反 我使用他们的 仅限托管 版本 这
  • WCF 服务应该返回普通的旧对象,还是您正在使用的实际类?

    我正在使用另一家公司的 WCF 服务 它返回一个类型的对象object 是否有理由不返回实际的类 并返回必须转换为正确形式的对象 例如 如果 Web 服务返回一个类型的对象OrderStatus 为什么你要返回一个普通的旧的object 如
  • 在 Java 中打印到特定打印机 (IPP URI)

    Java中有没有办法打印到特定的IPP打印机 我发现的所有示例代码和教程都集中于如何使用如下内容打印特定类型的文档 DocFlavor flavor DocFlavor INPUT STREAM POSTSCRIPT PrintReques
  • UIImageView+animatedGIF 总是循环

    我使用了 mayoff Rob Mayoff UIImageView animatedGIF 制作的类 这是在 stackoverflow 上的答案之一中提出的 UIImageView 动画GIF https github com mayo
  • 如何在 TextBox 上使用 JQuery 的拖放功能?

    我正在使用 JQuery 并想要移动一个文本框 就像使用draggable 函数拖动它一样 并使其成为 droppable 以便在其上放置一些属性 我无法使文本框可拖动或可放置 只有当我用 Div 包围文本框时 这才成为可能 为什么会这样呢
  • 为什么Groovy的map没有metaClass?

    为什么 Groovy 的文字映射没有元类 lists work as expected aList println aList class class java util ArrayList println aList metaClass
  • 将networkx图导出到json图文件的方法?

    我有一个后续问题要问将networkx图保存为json图的方法 https stackoverflow com questions 3162909 method to save networkx graph to json graph 但
  • 高频 Ajax 和 MySQL 睡眠过载

    我目前正在开发一个轻型 php 框架 以便与我的网站的一些高请求 ajax 一起使用 并且遇到了一个有趣的问题 让我完全陷入困境 ajax 用于一系列通知 因此 javascript 每 30 秒发送一次 ajax 请求以获取新信息 这个
  • 检测自动过滤器更改

    我希望检测特定表上自动筛选器中的任何更改 目的是强制 UDF 对当前可见的表条目执行一些简单的算术以更新其结果 到目前为止 使 UDF 具有易失性还没有产生任何影响 但它也不直接针对表 这个解决方案 https stackoverflow
  • 无法访问静态上下文中的非静态字段 [字段名称]

    基类 public class DatabaseBase private readonly string connectionString private bool useCounters public DatabaseBase strin
  • 将数据从 GSP 传递到 Grails 中的控制器

    我根据数据库中的行创建一个带有控件的 GSP 页面 这取决于返回的值
  • 在 p:selectOneMenu 中使用带有 null/空值的“请选择”f:selectItem

    我正在填充一个
  • 如何使用 Postman 向 Django REST Framework 进行身份验证

    我试图弄清楚如何使用 Postman 向 Django REST Framework 进行身份验证 我有一个邮递员拦截器 但无论我尝试什么 我似乎都会收到 403 CSRF 验证失败 请求被中止 在 Chrome 中 我转到 DRF 的默认
  • Java DecimalFormat 的 C# 等效项是什么?

    我如何将以下代码转换为 C DecimalFormat form String pattern for int i 0 i lt nPlaces nDec 2 i pattern pattern 0 for int i nPlaces nD
  • Git 不允许我合并

    晚上好 我知道这是很常见的 互联网上可能有数千个答案 但我找不到一个有用的答案 我在当地有两个分行 MASTER Mk 我对 Mk 做了很多更改 提交了这些 然后切换到 MASTER 来合并这两个分支 但也有冲突 所以现在我在 MASTER
  • 如何使用 VBA 从 64 位 Windows Vista 调用 ActivateKeyboardLayout

    在 XP 下运行 VBA 我能够调用 ActivateKeyboardLayout 将我的输入语言从英语切换到另一种语言 然而 这在 Vista64 下不再起作用 有什么建议或解决方法吗 过去在 XP 下工作的代码类似于以下内容 Priva