分解 LPARAM 变量并查看位组

2023-12-04

我知道 LPARAM 变量设置了某些位(在其内部),当我收到 WM_KEYDOWN 事件时,这些位可识别诸如长按键等信息。

所以我试图分解一个 LPARAM 变量并查看各个位值组和位组以及该值(例如查看第 16 位到第 24 位以及其中的值)。

我的问题:我不知道如何查看单个位和位组?如何分解 LPARAM 变量并查看位值(以二进制、十六进制和十进制打印)。

到目前为止我已经有了这个,但是在位级别上工作让我很困惑,所以我不确定我是否真的在查看十进制的第 24 位、第 25 位和第 16 位值等。

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

    switch(msg)
    {
        case WM_KEYDOWN:
        {
            // I know that a LPARAM variable is a 32 bit(or is it byte?) long variable. How would I look at the
            // 16th bit value? How would I look that the value from the 16th to the 24th bit?
            printf("A: %d, %d, %d\n", lParam >> 24, lParam >> 25, lParam >> 16 );
        }
        break;

一般来说,您可以使用按位与来检查是否设置了某个位:

unsigned int flags;  // some flags

if (flags & 0x01) { } // bit 0 is set
if (flags & 0x02) { } // bit 1 is set
if (flags & 0x04) { } // bit 2 is set
...
if (flags & (1U << n)) { } // bit n is set

但是,不要依赖物理位值。相反,API 定义了 USEFUL_CONSTANTS 来描述标志的含义:

LPARAM flags = ApiFunction();
if (flags & USEFUL_CONSTANT) { } // check if the flag is set

检查相关消息的 API 文档以了解定义了哪些值。

Update:我发现在你的情况下你可能真的想要values而不仅仅是旗帜。因此,要获取最低 16 位的值,只需将该值与相应的位掩码进行按位与:unsigned int repeat_count = flags & 0xFFFF;请注意,0xFFFF 的二进制值为 1111111111111111。

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

分解 LPARAM 变量并查看位组 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似

随机推荐

  • 在 R 中将一列分成两部分,中间留有空格

    我有一个数据框 其前 20 个 obs 如下所示 userID appName startTime endTime endResult Handset Gender Age Telecom 1 007qkrtk com kakao talk
  • 为什么在 C++ 类成员函数中使用关键字“const”两次

    我一直在类中运行函数定义 如下所示 Accessor function const string getName const return name 我的问题是 为什么 const 这个词出现两次 我知道定义末尾的 const 有助于保护原
  • 忽略 JWT 中的签名

    我有一个使用 OpenId Connect 的 Web 应用程序 我创建了一个自签名证书 但它仍未由 CA 签名 如何忽略签名验证 这是我到目前为止所拥有的 SecurityToken validatedToken null var tok
  • 在 x86_64 上添加 i2c 客户端设备

    在我的 x86 64 板上 有来自 MFD 设备的 i2c 总线 此 i2c 总线上有设备 我能够使用 i2cDetect 程序检测这些设备 i2cdetect y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00
  • 如何从用户处获取一个号码

    我刚刚学习 C 到目前为止 我一直在使用 javascript 和 php 等语言 但我很难将我的一些思维步骤转换为 C 的可能性 我正在编写的程序 听起来比实际要大 使用输入菜单让用户选择一个选项 选项可以是 1 2 或 3 现在 我正在
  • 使用批处理代码批量进行 xml 格式化?

    我有一个包含 50 个子文件夹的文件夹 每个子文件夹包含 2 个 xml 文件 O DATA xml S DATA xml 由于它们在记事本中出现在一行中 因此我必须修复格式 我从类似的问题中找到了这段代码 echo off setloca
  • python 异步特殊类方法 __delete__

    海峡到点 我怎么能够async def特殊类方法 例如 delete 在Python中 为什么我需要这个 为了实现在多个进程之间共享的良好缓存系统 我想从数据库中检索一次数据并将它们存储在缓存中 修改缓存中的数据 当不再使用数据时 更新数据
  • swing 中的 EDT 更新是绝对规则还是有例外?

    在 Swing 中 GUI 应该仅由 EDT 更新 因为 GUI 组件不是线程安全的 我的问题是 如果我有一个除 EDT 之外的线程 专用于更新特定组件 并且该组件不被程序中的任何其他线程访问 只有这个专用线程访问 可以吗 就我而言 我有一
  • Tensorflow,如何将 2D 张量(矩阵)乘以 1D 向量中的相应元素

    我有一个二维矩阵M形状的 batch x dim 我有一个向量V形状的 batch 如何将矩阵中的每一列乘以 V 中的相应元素 那是 我知道一个低效的 numpy 实现将如下所示 import numpy as np M np random
  • Java:哪个更快?局部变量还是访问封装?

    我最近读了一篇StackOverflow问题这表明 访问变量时 使用堆栈比使用堆更快 void f int x 123 lt located in stack int x lt located in heap void f x 123 但是
  • 如何在 swift 闭包中抛出错误?

    请看下面的代码 override func tableView tableView UITableView editActionsForRowAtIndexPath indexPath NSIndexPath gt UITableViewR
  • 打印 PHP 调用堆栈

    我正在寻找一种在 PHP 中打印调用堆栈的方法 如果该函数刷新 IO 缓冲区 则会获得奖励点 比以下内容更具可读性debug backtrace e new Exception var dump e gt getTraceAsString
  • get 请求在 Node.JS 和 Express 中不起作用

    我的 app get 没有运行 我不知道为什么 我也尝试过使用 作为路线 但我无法返回任何内容 我已经发布了下面的代码 const express require express const morgan require morgan co
  • 在android 2.3上通过HTTPS播放.m3u8文件

    在我的代码中的某个时刻 应用程序发现一个指向 m3u8 文件的 URL 这就是接下来发生的事情 mVideoView setVideoURI Uri parse feed getUrl toString feed getUrl return
  • 有没有办法让 Ant 创建 shell 或批处理运行时脚本?

    有没有办法让 Ant 创建运行时 shell 或批处理运行时脚本 而不必自己手动创建脚本 它的功能类似于链接文本 是的 这是可以做到的 这是一个简单的示例 您的链接现在不起作用 抛出了 sourceforge 错误 基本思想是使用echo任
  • 在真实手机(而不是模拟器)上使用 adb logcat

    当我使用 Android 模拟器时 我可以执行 adb logcat 来查看源自我的代码的输出消息 log system out println 它还显示执行期间发生的异常的堆栈跟踪 但是 当我使用真正的手机时 adb logcat 不会执
  • 将单词转换为字符数组

    如何将单词转换为字符数组 可以说我有 肺炎超微硅火山尘肺病 这个词 是的 这是一个词 我想给这个词赋一个数值 a 1 b 2 z 26 int alpha 1 int Bravo 2 基本代码 if testvalue a Debug Wr
  • Android 方向变化

    我的选项卡式应用程序不会通过方向更改重新显示视图 I added android configChanges keyboardHidden orientation 到主选项卡活动和清单中的每个活动 我将这个方法添加到每个活动中 public
  • Objective C 中的 Sqlite 数据库插入语句

    我尝试仅将两个整数变量插入到我的 sqlite 数据库中 我创建了一个名为 ups sqlite 的数据库 它有一个表 upssTable 该表有两列 但是当我打开 Users ds Library Application Support
  • 分解 LPARAM 变量并查看位组

    我知道 LPARAM 变量设置了某些位 在其内部 当我收到 WM KEYDOWN 事件时 这些位可识别诸如长按键等信息 所以我试图分解一个 LPARAM 变量并查看各个位值组和位组以及该值 例如查看第 16 位到第 24 位以及其中的值 我