如何从 VB-6 旧应用程序中启动屏幕键盘程序

2024-04-25

我正在尝试从 Windows 10-32 或 Windows 10-64 位计算机上的 VB-6 应用程序中“shell osk.exe”。

过去我们只是简单地使用:

Private Sub Command1_Click()
Dim strTemp As String
Dim fso1 As New FileSystemObject
strTemp = fso1.GetSpecialFolder(SystemFolder) & "\osk.exe"

Dim lngReturn As Long
Let lngReturn = ShellExecute(Me.hwnd, "Open", strTemp, vbNullString, "C:\", SW_SHOWNORMAL)

lblReturn.Caption = CStr(lngReturn)

end sub

我们还使用了更简单的“shell”命令;两者都不起作用。

在过去,这效果很好。我们还可以从我们的程序中打开 NotePad、msPaint 和其他一些实用程序。我们使用工业触摸屏电脑,为了方便起见,我们在“设置”页面上放置了一些按钮来快速访问这些类型的帮助程序。我不想等待程序,我们的代码有它自己的“触摸屏键盘”。用户仅当想要在我们的主应用程序之外执行某些工作时才会使用 Windows OSK。

对于 Windows XP,所有这些程序都可以正常打开。现在,对于 Windows 10,只有 OSK.exe 程序无法启动。查看返回代码,返回的错误是“2” - 文件未找到(我假设)。但是在 c:\windows\system32 文件夹中查看文件 'osk.exe' 以及 mspaint.exe 和 notepad.exe 。

是否有某些 Windows 设置从我的程序中隐藏了真正的 osk.exe?

感谢您的任何建议。


在我的 64 位 Windows 10 上,您的代码的行为如您所说。看起来在 64 位 Windows 上您必须禁用 WOW 64 重定向:

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
    ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL = 1

Private Declare Function Wow64EnableWow64FsRedirection Lib "kernel32.dll" (ByVal Enable As Boolean) As Boolean '// ****Add this****

Private Sub Command1_Click()
    Dim fso1 As New FileSystemObject
    Dim strTemp As String

    strTemp = fso1.GetSpecialFolder(SystemFolder) & "\osk.exe"

    Dim lngReturn As Long
    Wow64EnableWow64FsRedirection False '// ****Add this****
    Let lngReturn = ShellExecute(Me.hwnd, "open", strTemp, vbNullString, "C:\", SW_SHOWNORMAL)
    Wow64EnableWow64FsRedirection True '// ****Add this****
    lblReturn.Caption = CStr(lngReturn)
End Sub

这段代码在 Windows 10 64 位上就像一个魅力。还在 Windows 10 32 位上进行了测试...也适用。

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

如何从 VB-6 旧应用程序中启动屏幕键盘程序 的相关文章

  • 无法使用 Windows 10 移动技术预览版将通用应用程序部署到手机

    我已解锁开发者卢米亚 635昨天刚刚更新为Windows 10 移动版技术预览版 http windows microsoft com en us windows preview download phone 操作系统版本 10 0 125
  • Zookeeper管理服务器端口

    在Windows上安装了zookeeper 3 5 6 bin 出现错误 无法启动AdminServer 异常退出 org apache zookeeper server admin AdminServer AdminServerExcep
  • DirectX Release 构建可以通过 VS2010 运行,但不能运行 exe

    我已经通过 Google 访问 Stack Overflow 几年了 但到目前为止还没有询问 回答任何问题 所以就到这里吧 基本上 我有一个在 DirectX 11 中设置绘图模型和地形的 3D 渲染框架 一切正常 通过 Visual St
  • 在 VB6 中什么时候必须将变量设置为“Nothing”?

    在我的一个 VB6 表单中 我创建了几个其他 Form 对象并将它们存储在成员变量中 Private m frm1 as MyForm Private m frm2 as MyForm Later Set m frm1 New MyForm
  • 无法在 Windows 10 中完全删除 Cygwin

    我无法删除 Windows 10 设置中的 Cygwin 我缩小了范围 导致问题的文件是C cygwin usr share avogadro crystals zeolites CON cif 就我而言 为什么无法删除cywin目录 文件
  • string[] 和 List 的不同绑定行为

    我尝试理解 没有成功 为什么当源对象是时绑定行为不同string and List
  • VB6 UDT 自检

    我有一种感觉 这个问题的答案将是 不可能 但我会尝试一下 我的处境并不令人羡慕 需要修改旧版 VB6 应用程序并进行一些增强 转换为更智能的语言不是一个选择 该应用程序依赖大量用户定义类型来移动数据 我想定义一个通用函数 它可以引用任何这些
  • Windows 10 上的 ContextMenu 和 Popup WPF 控件对齐错误

    这确实是一个奇怪的问题 我希望有人知道如何解决 情况 我们的 WPF 项目有一个表单 我们在其中显示上下文菜单 ContextMenu 控件 和弹出窗口 Popup 控件 以响应某些用户操作 在大多数情况下 它发生在鼠标单击某个文本块时 这
  • VS 2015 命令提示符中不再找到 rc.exe

    我刚刚安装了 Windows 10 创意者更新 版本 10 0 15063 我安装了多个版本的 Visual Studio 2012 2013 2015 和 2017 我几周前才安装了 VS 2017 Problem CMake 版本 3
  • 如何将数组(在 VB6 中通过引用)传递给 C\C++ *.dll 子例程?

    我需要将一个空的变体数组传递给一个用 C 编写的 DLL 并且在所有 Windows 版本上都可用 并且 C 代码 我无法控制也无法编辑 将用它的一些返回值填充空的变体数组价值观 基本上 当我尝试这样做时 ByRef 数组在应包含函数 子调
  • 在 Windows 10 UWP 应用程序中创建可滑动的 ListView,例如在地图应用程序中

    我正在创建 UWP 应用程序 我需要在滑动菜单中显示一系列结果 滑动菜单可滚动并且可以滑动改变其高度就像 Windows 10 Mobile 中的地图应用程序中的搜索结果一样 我找不到任何教程来创建这样的体验 提前致谢 您也可以使用User
  • 如何在 Windows 10 上设置玻璃混合颜色?

    使用无证的SetWindowCompositionAttribute API http vhanla codigobit info 2015 07 enable windows 10 aero glass aka blur html在 Wi
  • VB6 类有析构函数吗?

    当我执行诸如以下的语句时 Set MyObject Nothing 类中是否有一个被调用的特定函数 即我可以用作析构函数 来执行诸如清理数组 与数据库断开连接等操作 类似于Class Initialize 构造函数 还有一个析构函数 Sub
  • 如何在 .NET 中操作 VB6 集合?

    我目前正在为 NET 软件设计一个接口 该接口将由 COM 对象 特别是 VB6 使用 虽然我找到了 Microsoft 的许多页面 详细介绍了如何创建 COM 互操作接口 但我目前在设计时对 Collections 的使用感到困惑 我希望
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • ShinyApp:由对等方重置连接

    我之前构建的闪亮应用程序在我的旧笔记本电脑上运行良好 最近我买了一台装有Windows10的新笔记本电脑 设置完所有内容后 我尝试运行该应用程序 但浏览器立即打开并关闭 并出现错误 正在收听http 127 0 0 1 5004 http
  • Windows 10 上具有 kernel32.dll 的 Dependency Walker

    我尝试打开kernel32 dll在 Windows 10 上使用 Dependency Walker 我收到以下错误和警告 错误 未找到至少一个所需的隐式或转发依赖项 警告 至少未找到一个延迟加载依赖模块 Screenshot 我运行的是
  • “此应用程序只能在应用程序容器的上下文中运行。” - Visual Studio 2015 开发新手

    我有点绝望了 我几个小时以来一直在尝试解决以下问题 我开发了一个应用程序 现在尝试使用 Visual Studio 2015 的安装向导扩展来安装 一切都在构建或 没有错误 但是当我打开应用程序时 它突出显示它只能在应用程序容器的上下文中打
  • 在 C# 中使用 VB6 字符串数组

    我有 旧的 VB6 代码 我想从 C 代码中使用它 这有点类似于这个问题 https stackoverflow com questions 23507416 passing string array from vb6 to c net 但
  • UWP 应用中的设备 ID(阈值 1)

    在 Phone 8 1 中 您可以使用以下方式获取设备 ID硬件识别 https stackoverflow com questions 23321484 device unique id in windows phone 8 1 2332

随机推荐

  • 使用candlestick_ohlc显示csv

    我尝试用熊猫做第一步 经过几个成功的步骤后 我坚持执行以下任务 使用 OHLC 条显示数据 我从 Google Finance 下载了 Apple 股票的数据并将其存储到 csv 文件中 经过大量搜索 我编写了以下代码 import pan
  • 与 Socket.io 保持连接

    我正在尝试使用 asterisk websocket 连接socket io 客户端 https github com socketio socket io client socket io connect url transports w
  • 根据laravel中选定的省份获取城市列表

    如何获取基于所选省份的城市列表 我的控制器 public function index province RajaOngkir Provinsi gt all city RajaOngkir kota gt all return view
  • Intl.DateTimeFormat 给出 1847 年或以下年份的奇怪结果

    为什么我选择1848以下的年份 这种格式的结果是May 10 我有一种感觉 这可能与时区有关 如果是这样 我怎样才能避免这种情况 因为我将从 ISO 日期字符串 没有时间 创建一个日期对象 如下所示 YYYY MM DD 在 Chrome
  • 是否可以以编程方式指定

    有什么方法可以在活动 l 中以编程方式指定 in 的意思吗 因为在 Google Play 中 当用户尝试安装该应用程序时 它表示 Android 应用程序与您的 Kindle Fire 平板电脑设备不兼容 在我的应用程序中 我们使用的是地
  • 将 AutoFac 设置为默认使用 PropertiesAutowired(true) 吗?

    有没有办法我可以将 AutoFac 设置为使用 PropertiesAutowired true 作为所有注册类型的默认值 即我不想一直使用 Properties Autowired true var builder new Contain
  • 如何将数据从 C# 推送到 ZeroMQ 并从 Node.JS 拉取,反之亦然?

    Scenario 我正在尝试发送数据 例如String类型 通过 ZeroMQ 从 C 控制台应用程序到 Node JS 服务器 信息 分别对 C 使用 clrzmq 对 C 和 Node JS 使用 ZeroMQ 库 我有能力执行推拉 h
  • Python - PIP 安装故障排除 - PermissionError: [WinError 5] 访问被拒绝

    使用 PIP 安装新软件包甚至将 pip 本身升级到最新版本时出现以下错误 我正在 Windows 8 1 机器上使用 Python 3 4 运行 pip 该消息告诉我我没有文件的管理权限 我的帐户是管理员帐户 我很感激任何关于如何解决这个
  • createElement() 与innerHTML 何时使用?

    我在sql表中有一些数据 我通过 JSON 将其发送到我的 JavaScript 从那里我需要将其组成 HTML 以便通过两种方式之一向用户显示 通过编写 html 字符串并插入到持有元素的 innerHTML 属性中 通过对我需要的每个元
  • 使用 PHP GD 将文本置于图像中心

    所以我正在创建一个横幅生成器 我将在中间添加文本 但希望它正好位于中心 我知道imagettftext可以用来在横幅上书写 但这不会使其居中 一个可能的解决方案可能是找到文本的宽度 然后使用从横幅宽度的一半中取出的一半 但我不知道如何做到这
  • 如何限制登录尝试 - PHP & MySQL & CodeIgniter

    我希望能够根据失败的尝试来限制登录尝试 但我有一些问题 我应该使用 MySQL 吗 读到它可能会给数据库带来压力 我应该在每个用户和系统范围内进行限制还是仅在系统范围内进行限制 这样可以防止普通人猜测密码 我应该如何计算我的阈值 因此它会自
  • Django Rest Auth 自定义密码重置链接

    我已经尝试过针对类似问题找到的解决方案 但没有一个对我有用 我使用的是 Angular 前端 DRF Django Rest Auth 对于确认 url 我能够通过添加看起来像这样的自定义适配器来覆盖它以指向我的前端 class Accou
  • 防止同一用户在桌面应用程序上登录

    我正在开发一个多用户桌面应用程序 我需要找到一种方法 让每个用户名一次只允许一个用户登录 基本上 John 无法从 PC A 登录应用程序 然后再运行到 PC B 并登录 我的想法是设置一个位标志来指示用户已登录 并且当从另一个位置进行尝试
  • 为什么Python中set的大小可以比dict大?

    为什么a的大小是set比一个大dict s set d for i in range 20 s add i d i 1 print f i 1 s sizeof d sizeof Output 17 712 624 18 712 624 1
  • 如何在 Google Dataproc 集群中安装 python 包

    创建并运行集群后 是否可以在 Google Dataproc 集群中安装 python 包 我尝试使用 pip install xxxxxxx 在主命令行中 但它似乎不起作用 Google的Dataproc文档没有提及这种情况 创建集群后
  • 按组添加ID列[重复]

    这个问题在这里已经有答案了 我想根据两列纬度和经度在 R 中创建一个唯一 ID 以便重复的位置具有相同的集群 ID 例如 LAT LONG Cluster ID 13 5330 15 4180 1 13 5330 15 4180 1 13
  • MemoryCache 的大小设置意味着什么?

    在控制器类中 我有 using Microsoft Extensions Caching Memory private IMemoryCache cache private readonly MemoryCacheEntryOptions
  • PHP 创建日期范围

    以这种格式的日期开始 2011 05 01 09 00 00 如何创建一个包含一年中所有工作日 因此排除所有周六和周日 的所有办公时间 09 00 到 17 00 的数组 我想要达到的是这样的 2011 05 01 09 00 00 201
  • 重置远程跟踪分支

    如何将远程跟踪分支的分支指针重置为其之前的提交之一 这样看起来我没有拉动 类似于本地分支的硬重置 您可以使用以下命令设置对任何其他提交的引用 git update ref refs remotes origin master
  • 如何从 VB-6 旧应用程序中启动屏幕键盘程序

    我正在尝试从 Windows 10 32 或 Windows 10 64 位计算机上的 VB 6 应用程序中 shell osk exe 过去我们只是简单地使用 Private Sub Command1 Click Dim strTemp