You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改VBA代码以在64位Excel(Windows 10 64位系统)中打开屏幕键盘(osk.exe)

在64位Excel VBA中打开屏幕键盘(osk.exe)的解决方案

我帮你调整了代码,适配64位Excel环境,同时简化了不必要的操作。下面是修改后的完整代码,以及关键调整点的说明:

关键修改点

  • 移除Wow64文件系统重定向相关代码:64位Excel本身运行在64位Windows的原生环境中,不需要Wow64DisableWow64FsRedirection和Wow64RevertWow64FsRedirection这两个API——这些是给32位程序在64位系统里访问64位系统目录用的,64位程序直接访问System32就是正确的目录。
  • 修正SHELLEXECUTEINFO结构的类型:把结构里多个原Long类型的指针字段改为LongPtr,比如hProcess、hInstApp等,因为64位环境下指针类型需要用LongPtr保证兼容性。
  • 简化执行逻辑:直接调用osk.exe,不需要通过cmd.exe中转,让代码更简洁高效。

修改后的完整代码

Option Explicit

Type SHELLEXECUTEINFO
    cbSize As LongPtr
    fMask As Long
    hwnd As LongPtr
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As LongPtr ' 原Long改为LongPtr,适配64位指针
    lpIDList As LongPtr ' 原Long改为LongPtr
    lpClass As String
    hkeyClass As LongPtr ' 原Long改为LongPtr
    dwHotKey As Long
    hIcon As LongPtr
    hProcess As LongPtr ' 关键修改:原Long改为LongPtr
End Type

Public Declare PtrSafe Function ShellExecuteEx Lib "shell32.dll" _
    (lpExecInfo As SHELLEXECUTEINFO) As LongPtr

Public Function KeyboardOpen()
    Dim shInfo As SHELLEXECUTEINFO
    
    With shInfo
        .cbSize = Len(shInfo)
        .lpFile = Environ("WINDIR") & "\System32\osk.exe" ' 自动获取系统目录,适配不同配置
        .lpVerb = "open"
        .nShow = 1 ' 让屏幕键盘窗口正常显示
    End With
    
    Call ShellExecuteEx(shInfo)
End Function

Sub OpenKeyboard()
    Call KeyboardOpen
End Sub

额外说明

  • 如果你的场景依然需要通过cmd.exe中转(比如有特殊参数需求),可以把lpFile设为"cmd.exe",lpParameters设为"/c start osk.exe",同时nShow设为0隐藏cmd窗口,但直接调用osk.exe更高效。
  • Environ("WINDIR")会自动获取系统安装目录(比如C:\Windows),比硬编码路径更适配不同系统配置。

内容的提问来源于stack exchange,提问作者Jonathan Walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:07:41