有没有办法在基于 DOS 的程序中读取键盘修改键,例如 ALT 或 CTRL?

2023-12-21

我确实知道您可能会轮询键盘缓冲区以获取修饰键,例如 ALT 或 CTRL。但即使在旧的 DOS 程序中,当我按下这些键时也会执行一个操作(例如,通过按 ALT 来更改菜单按钮的颜色)。在DOS下有没有办法获得这些密钥?这是如何做到的?我认为在 BASIC 中没有解决方案,尽管 BASIC 有一些可用的 ON Eventhandler。欢迎对此问题提出任何建议或意见。


You can look at the KeyboardStatusFlags at linear address 1047 in the BIOS data area. For the Alt key you examine bit 3, and for the Ctrl key you examine bit 2. Next QBASIC program does exactly that:

DEF SEG = 0
DO
  IF PEEK(1047) AND 8 THEN
    PRINT "ALT is pressed"
    EXIT DO
  ELSEIF PEEK(1047) AND 4 THEN
    PRINT "CTRL is pressed"
    EXIT DO
  END IF
LOOP

回复评论

还有一种方法可以通过查看地址来获取按下的按键(ASCII 值)吗?

您可以再次在键盘缓冲区(循环缓冲区)中找到此信息。 BIOS 维护一个字大小的指针,指向存储下一个可用密钥的位置 (HEAD),以及一个字大小的指针,指向存储最近缓冲的密钥后面的位置 (TAIL)。如果 HEAD 等于 TAIL,则键盘缓冲区为空。INKEY$在这种情况下将返回一个空字符串。

Head% = PEEK(1050) + 256 * PEEK(1051)
Tail% = PEEK(1052) + 256 * PEEK(1053)
IF Head% <> Tail% THEN
  Ascii% = PEEK(1024 + Head%)
  Scan% = PEEK(1024 + Head% + 1)
ELSE
  Ascii% = 0
  Scan% = 0
END IF

上面代码的“优点”是你可以preview键盘缓冲区中接下来可用的键(如果有)。钥匙没有被移除。INKEY$可以提供相同的信息但也会删除钥匙.

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

有没有办法在基于 DOS 的程序中读取键盘修改键,例如 ALT 或 CTRL? 的相关文章

  • 计算段:距绝对地址的偏移量

    我可以计算一个地址Segment Offset as Segment 0x10 Offset 但如何计算相反的情况呢 例如 我怎样才能从0xF4170 to F400 0170和来自0xACF04 to ABCD 1234 您需要具有起始基
  • Phonegap:在 Android 中调整键盘显示上的 webview 大小

    我有一个类似的模态 有固定定位 Facebook 在最新的 Android 版本中对 Messenger 中的 feed chat 中的评论有何评论 我想要的看起来类似于 因此 当您专注于输入时 键盘会打开并缩小网络视图 默认情况下它不起作
  • 用户输入-DOS批处理文件

    我得到一个bat文件 如下所示 ECHO Executing scripts PAUSE for X in SQL do SQLCMD S localhost d CTL I i X gt gt ResultScript txt pause
  • iOS 键盘扩展内存崩溃

    我在使用 iOS 键盘扩展时遇到了内存问题 我有一个键盘视图的自定义视图 我将其初始化为loadViewUIInputViewController的 函数 然后将其添加到自我观作为一个孩子 但我有记忆问题 尤其是在 WhatsApp 应用程
  • 查找输入字符串中的子字符串

    我有这个汇编程序 我需要在我输入的主字符串中找到子字符串 我的问题是 即使我输入了两个完全不同的单词 它总是输出 找到的单词 我不知道我的循环或条件的哪一部分是错误的 请帮我弄清楚 另外 请建议一些可用于检查子字符串的字符串指令 以便我可以
  • iOS:处理长按并拖动以选择另一个按钮。 (如键盘)

    我很难找到有关如何处理触摸事件以支持与键盘类似的行为的正确文档 我想要的是一个按钮 当我长按它时 它会在按钮上方显示一个自定义视图控制器 但我希望用户能够将手指拖动到其他按钮之一 无需将手指离开屏幕 我长按按钮 它是自定义视图控制器的所有设
  • 如何在循环期间的任意时刻检查按键按下情况?

    我正在尝试制作一个倒数到 0 然后开始向上计数的计时器 我正在使用时间和键盘模块 这keyboard https pypi org project keyboard来自 PyPi 的模块 一切都按预期进行 我可以按一个按钮关闭程序 但它只在
  • 从另一个 Activity 返回时 SearchView 获得焦点并打开键盘

    当我从另一个活动返回主活动时 searchView 获得焦点并且键盘打开 我设法使用以下方法阻止键盘打开 getWindow setSoftInputMode WindowManager LayoutParams SOFT INPUT ST
  • 不知道如何一次打印整个日历[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 cseg segment assume cs cseg ds cseg org 100H begin mov es cs video mov
  • Android 中的自定义键盘视图

    我正在开发一个自定义 Android 键盘 我开始开发我的键盘 基于this http code tutsplus com tutorials create a custom keyboard on android cms 22615教程
  • 如何防止键盘隐藏我的EditText?

    我在顶部有一个relativeLayout 然后在下面的中心有一个ListView 最后在底部我有另一个relativeLayout 里面有一个EditText和一个Button 我希望当我单击 EditText 并出现 IME 虚拟键盘
  • ios:如何检测 UITextField 是否使用了语音听写?或者点击键盘上的麦克风按钮

    如何检测 UITextField 是否使用了语音听写 或者点击键盘上的麦克风按钮 有什么办法可以做到这一点吗 UITextField 符合UI文本输入协议 https developer apple com library prerelea
  • android 中软键盘上方需要上一个、下一个按钮

    我想在键盘上方显示带有 上一个 下一个 按钮的虚拟键盘 当用户单击 上一个 按钮时 光标应移动到上一个编辑文本输入字段 单击 下一个 按钮应转到视图中的下一个编辑文本字段 如果我们在Android浏览器中打开任何要求输入的页面 我们就可以看
  • 获取 UITableView 滚动到选定的 UITextField 并避免被键盘隐藏

    我有一个UITextField在表视图中UIViewController not a UITableViewController 如果表视图位于UITableViewController 表格会自动滚动到textField被编辑以防止它被键
  • 如何关闭 iOS 键盘?

    我有一个 UITextfield 我想关闭键盘 无论我使用什么代码 我似乎都无法让键盘消失 如果您有多个文本字段并且不知道哪个是第一响应者 或者您根本无法从编写此代码的任何位置访问文本字段 您可以调用endEditing 在包含文本字段的父
  • Android:多行编辑文本和键盘问题

    我有这个编辑文本
  • 键盘挂钩获取组合键(WPF)

    我尝试在这里使用这篇文章 在 WPF C 中使用全局键盘钩子 WH KEYBOARD LL https stackoverflow com questions 1639331 using global keyboard hook wh ke
  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • Android:Enter 或 Tab 键仍然使用 jetpack compose 在密码输入字段中输入值

    当我输入或 Tab 键时 仍然使用 jetpack compose 在密码输入字段中输入值 下面是我的代码片段 val focusRequester FocusRequester createRefs TextField value tex
  • Swift 4.2 当键盘显示时使 tableView 的底部向上移动

    尽管我已经进行了搜索 但我对如何最好地解决这个问题感到困惑 我有一个 tableView 其中底部单元格是列表的输入 就像苹果提醒的工作方式一样 当列表中的项目太多时 键盘会覆盖列表 我看不到正在输入的内容 我认为我需要更改表视图的物理大小

随机推荐

  • 查找两条曲线之间的重叠面积

    我一直在努力寻找解决方案来找到两条曲线之间的重叠区域 我处理的不是具有已知参数的概率密度函数 而是通过平滑经验数据点获得的曲线 我发现的唯一提示是计算不重叠的区域 如这段代码 来自here https www researchgate ne
  • 使用 python 求解 7000x7000 线性系统时的最佳性能方法

    我需要一种有效的方法来反转 python 中的 7000x7000 空气动力学影响系数 密集 矩阵 在使用 FORTRAN 例程之前 我已经开始使用 LAPACK 中的 LU 分解例程来处理问题 我已经看到它在其他相关应用程序中的使用非常有
  • 用户输入数字时的 Javascript 计算器

    我是 Javascript 新手 但我正在尝试在我的网站上实现一些功能 用户可以在其中输入数量 并且小计会在输入时动态更新 例如 如果每件物品的价格为 10 美元 并且用户在文本字段中键入 5 我希望它在文本框旁边显示 50 美元 非常简单
  • REST - 使用 Spring MVC 返回创建的对象

    我有一个 REST 调用 它接受一个 JSON 对象 比如说一个人 创建此对象 经过验证并保存到数据库 后 我需要返回新创建的 JSON 对象 我认为标准做法是返回201 Accepted而不是立即返回对象 但我的应用程序立即需要新创建的对
  • 有人使用 Sphinx 来记录 C++ 项目吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Sinatra/Ruby 默认一个参数

    有没有办法在 Sinatra 中默认参数 我目前正在寻找是否 start 作为参数传递 但看起来有点hacky 如果我能告诉 Sinatra 在未指定的情况下默认某些参数 那就太好了 get comments do want to setu
  • 选择 html 元素内的文本并更改样式

    text1 div text2 div 我只需要选择 text1 并添加一些样式 I tried body color red 但text1和text2都变成红色 我正在寻找类似的东西 css selector im searching c
  • 使用新的 prefixText 时如何更改 TextInputLayout 的提示填充?

    我尝试过实施TextInputLayout与新的prefixText using com google android material material 1 2 0 alpha02 这是一个非常酷的功能 但是当我添加前缀文本时 提示标签会
  • 为什么 C/C++ 编译器需要在编译时知道数组的大小?

    我知道 C99 以及 C 之前的 C 标准规定 堆栈上数组的大小必须在编译时已知 但这是为什么呢 堆栈上的数组是在运行时分配的 那么为什么大小在编译时很重要呢 希望有人向我解释编译器在编译时将如何处理大小 谢谢 这种数组的示例是 void
  • 具有最小宽度的 3 列布局(固定、流动、固定)

    我在网上搜索过 似乎找不到一个干净 简单 所有浏览器友好的三栏布局 我希望有 3 列布局 左列固定为 200px 右列固定为 200px 中间列保留剩余宽度 但最小宽度为 600px 所以整体最小宽度是 200px 600px 200px
  • 如何访问angular2组件中的全局js变量

    我在下面定义了一个全局 js 变量 Url 是一个 ASP Net MVC html 帮助器 它将转换为字符串值 如何访问 angular2 组件中的 rootVar 我曾经在 Angular 1 5 中使用窗口服务 在 Angular2
  • 使用 ADO.Net 实体模型的优点和缺点

    HI 使用 ADO NET 实体模型作为数据层有哪些优缺点 如果我要使用这项技术 我应该使用 LINQ 吗 Thanks 首先 您不必使用 LINQ 来使用实体框架 EF 但它确实有帮助 EF 基于 EF 团队所称的东西实体SQL 因此 当
  • Linq 合并左连接数据

    假设我有以下数据库 Users UserId PK UserName Roles RoleId PK RoleName UserRoles UserId PK RoleId PK 用户 1 M 用户角色 M 1 角色 使用 LinqToSQ
  • 如何在 Windows 7 GAC 中注册 Assembly .net 4.0?

    您好 我正在使用 vs2010 创建一个 net 4 0 程序集 我假装在 GAC 上注册该程序集 我找不到 gacutil 也不知道如何在 4 0 GAC 上注册程序集 有人可以帮忙吗 找到解决方案 使用位于以下位置的 GacUtil 进
  • 如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序?

    假设我有一个文件 ab aa c aaaa 我希望它像这样排序 c aa ab aaaa 即按行长度排序 然后按字母顺序排序 这在 bash 中可能吗 您可以在每行前面添加行的长度 然后进行数字排序 最后剪掉数字 lt your file
  • PostgreSQL - 使 ts_rank 按原样采用 ts_vector 位置或定义自定义 ts_rank 函数

    我正在对电子商务平台中的一系列商品执行加权搜索 我遇到的问题是 ts rank 为不同的单词组合提供了完全相同的值 即使 ts vector 为每组单词提供了不同的位置 让我用一个例子来说明这一点 如果我给 ts vector 这个词cam
  • zsh 和 bash 的 echo 有什么区别?

    在 bash 中 在这种特定情况下 echo 的行为如下 bash c echo a nb a nb 但在 zsh 中 同样的事情结果却截然不同 zsh c echo a nb a b 和鱼 因为我很好奇 fish c echo a nb
  • “类的无参数构造函数不存在”,但它确实存在

    我收到错误No args constructor for class MwVolleyApi Page does not exist Register an InstanceCreator with Gson for this type t
  • Javascript 在 if 语句中返回 false

    使用 return false 是个好习惯吗 基本上是说在 if 语句中什么都不做 例如 if navigator userAgent match iPad i null return false else Usual script her
  • 有没有办法在基于 DOS 的程序中读取键盘修改键,例如 ALT 或 CTRL?

    我确实知道您可能会轮询键盘缓冲区以获取修饰键 例如 ALT 或 CTRL 但即使在旧的 DOS 程序中 当我按下这些键时也会执行一个操作 例如 通过按 ALT 来更改菜单按钮的颜色 在DOS下有没有办法获得这些密钥 这是如何做到的 我认为在