Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WINDOWPLACEMENT结构的正确长度

WINDOWPLACEMENT结构的正确长度
EN

Stack Overflow用户
提问于 2020-06-25 18:52:26
回答 1查看 225关注 0票数 1

我正在开发一个需要获取/设置Win32窗口放置信息的应用程序。我使用的是WindowsCore3.1和.NET 10 1909。我为GetWindowPlacement添加了一个P/Invoke方法和结构:

代码语言:javascript
运行
AI代码解释
复制
[DllImport("USER32.DLL")]
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);


[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public long left;
    public long top;
    public long right;
    public long bottom;
}

[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPLACEMENT
{
    public uint length;
    public uint flags;
    public uint showCmd;
    public POINT ptMinPosition;
    public POINT ptMaxPosition;
    public RECT rcNormalPosition;
    public RECT rcDevice;
}

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public long x;
    public long y;
}

然后我这样叫它:

代码语言:javascript
运行
AI代码解释
复制
var placement = new WINDOWPLACEMENT();
placement.length = (uint)Marshal.SizeOf(placement);
if (GetWindowPlacement(hWnd, ref placement))
{
    // do something with placement info
}

Marshall.SizeOf返回一个108字节的长度,并且调用似乎成功了,但是之后放置结构总是将其length值设置为44,并且RECT值都是0。flagsshowCmdPOINT值可以很好地通过。我尝试过将length硬编码为其他值,比如112或120字节,或者0字节,但我总是得到带有length = 44且没有矩形的结构。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 19:04:50

<Windows.h>中,该结构定义如下:

代码语言:javascript
运行
AI代码解释
复制
typedef struct tagWINDOWPLACEMENT {
    UINT  length;
    UINT  flags;
    UINT  showCmd;
    POINT ptMinPosition;
    POINT ptMaxPosition;
    RECT  rcNormalPosition;
#ifdef _MAC
    RECT  rcDevice;
#endif
} WINDOWPLACEMENT;
typedef WINDOWPLACEMENT *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;

所以它的大小是没有定义_MAC3*sizeof(UINT)+2*sizeof(POINT)+1*sizeof(RECT),再加上一个定义了_MACRECT

因此是44,在_MAC上是60 (参见What's with "#ifdef _MAC" in Windows header files?)

因此您应该在不使用RECT rcDevice的情况下定义它

另一个错误是C# long是8字节的,你需要在POINTRECT中使用int

两个都修好了,你就有44个了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62582387

复制
相关文章
offset size_c语言sizeof求结构体长度
sizeof与offsetof在程序中经常遇到,但在面试中其应用使得许多小伙伴吃闭门羹,被面试官问得哑口无言。接下来对两者的应用做详细介绍。
全栈程序员站长
2022/09/23
7080
RSA密钥长度、明文长度和密文长度
本文介绍RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,天缘以后还会补充几篇RSA基础知识专题文章,用最简单最通俗的语言描述RSA,让各位了解RSA算法本身其实也很简单,RSA的复杂度是因为数学家把效率和安全也考虑进去的缘故。
竹清
2018/08/31
22.5K0
Redis的SDS的内部结构,它的长度和空间预分配策略
SDS(Simple Dynamic String)是Redis中用于处理字符串的数据结构。
一凡sir
2023/09/14
5050
Redis的SDS的内部结构,它的长度和空间预分配策略
NUMBER长度的误解
NUMBER类型是Oracle的一种变长数值类型,他的取值范围是10^(-130)-10^126(不包括),精度是38位,存储空间是1-22字节。
bisal
2020/04/17
3.2K0
数据结构--链表--单链表中环的检测,环的入口,环的长度的计算
完整代码见:https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/linkedList
Michael阿明
2021/02/20
5950
数据结构--链表--单链表中环的检测,环的入口,环的长度的计算
24:单词的长度
24:单词的长度 总时间限制: 1000ms 内存限制: 65536kB描述 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。  注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。 输入一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。输出依次输出对应单词的长度,之间以逗号间隔。样例输入 She was born in 1990-01-02 and
attack
2018/04/03
1.8K0
webservice最大长度_网址最大长度
HTTP GET请求的最大长度是多少? 是否定义了一个响应错误,如果服务器收到超过此长度的GET请求,服务器可以/应该返回该错误?
全栈程序员站长
2022/09/23
3.3K0
webservice最大长度_网址最大长度
套接字地址结构的长度之类的值-结果参数要用指针来传递原因
当函数调用时,结构大小是一个值,它告诉内核该结构大小,这样内核在写该结构时,不至于越界;当函数返回时,结构大小又是一个结果,他告诉进程内核在改结构中究竟 存储了多少信息。
心跳包
2020/08/31
1K0
LeetCode 数据结构与算法无重复字符的最长子串长度详解
我们可以利用 hash 来判断不重复子串。如果 hash 表中存在该字符串,就进入下次循环;如果不存在,就放入集合中然后在再移动右指针。
PHP开发工程师
2022/04/12
2770
mysql前缀索引 默认长度_如何确定前缀索引的长度?
Specified key ‘uniq_code’ was too long; max key length is 767 bytes.
全栈程序员站长
2022/08/31
3.7K0
密码学系列之:Merkle–Damgård结构和长度延展攻击
Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击。这个结构是一些优秀的hash算法,比如MD5,SHA-1和SHA-2的基础。今天给大家讲解一下这个MD结构和对他进行的长度延展攻击。
程序那些事
2021/07/23
1.9K0
数据结构算法操作试题(C++/Python)——最后一个单词的长度
数据结构算法操作试题(C++/Python):数据结构算法操作试题(C++/Python)——目录
莫斯
2020/09/09
3200
ACL 2022 | 基于长度感知注意机制的长度可控摘要模型
以往的长度可控摘要模型大多在解码阶段控制长度,而编码阶段对指定的摘要长度不敏感。这样模型倾向于生成和训练数据一样长的摘要。在这篇论文中,作者提出了一种长度感知注意机制(LAAM,length-aware attention mechanism)来适应基于期望长度的编码。
zenRRan
2023/01/12
9910
ACL 2022 | 基于长度感知注意机制的长度可控摘要模型
任务显示与隐藏,任务管理器中应用程序显示与隐藏,悬浮窗任务栏显示 效果
1. 隐藏底部 “任务栏图标”和 隐藏 “任务任务管理器——应用程序—任务” ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);                        
全栈程序员站长
2021/12/06
1.6K0
序列比对的长度限制
前几天做序列比对,试了MUCSLE和MAFFT,但是程序总是被kill。刚开始以为是序列格式不对,但是检查到最后发现是序列太长了。以前没注意过这些比对算法对长度的要求,此文记录一下。
Listenlii-生物信息知识分享
2020/05/29
4K0
QML获取文字的长度
额外增加一层的Text, 并通过绑定父级的Text文本属性,即使父级的文本的width属性改变也不会影响到textLength的获取。
Qt君
2019/07/15
3.3K0
javascript计算对象的长度
计算对象的长度,即获取对象属性的个数 方法一:通过for in 遍历对象,并通过hasOwnProperty判断是否是对象自身可枚举的属性 var obj = {"c1":1,"c2":2}; function countProperties(obj){ for(var property in obj){ if(Object.prototype.hasOwnProperty.call(obj,property){ count++; })
用户1214487
2018/01/24
1.6K0
长度未知的数组大小
malloc 和 calloc都可以被用于申请堆上的空间。 malloc 和 calloc主要有两点不同:
小飞侠xp
2021/04/13
2.6K0
移动适配的长度单位
例:html中字体尺寸为 20px,盒子宽度为 5rem,则最后显示的盒子宽度为 100px。
岳泽以
2022/10/26
1.3K0
移动适配的长度单位
点击加载更多

相似问题

Python结构给出不正确的长度

12

NSString的正确长度

120

可变长度结构

15

结构阵列长度误差

11

类型长度值与定义/结构长度值

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档