主题 : 强迫症患者的福音,利用注册表调整Win10 UWP应用窗口大小和位置
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605058
威望: 529687 点
无痕币: 105 WHB
贡献值: 0 点
在线时间: 62601(时)
注册时间: 2008-12-25
最后登录: 2024-05-19

0 强迫症患者的福音,利用注册表调整Win10 UWP应用窗口大小和位置

Windows10的UWP应用(从Windows 8和8.1的商店应用起)利用统一的方式记忆窗口大小和位置。初次运行应用时,Windows将自动生成默认的窗口大小和位置。当应用窗口关闭时,当前的窗口大小和位置信息将会被写入注册表。
每个应用的窗口大小和位置信息存储在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ApplicationFrame\Positions\[应用的PackageFamilyName]![应用的ID]”下的PositionObject中。IT之家UWP应用的PackageFamilyName为“CEF5787D.IT_tjw031c2n34qp”。
本机安装的所有应用的PackageFamilyName列表可以用PowerShell运行Get-AppxPackage | findstr "^PackageFamilyName"来获得。
PositionObject是一个44字节的REG_BINARY值,内容如下图:

每项数据都是一个32位整数,以小端序存储,格式如下:
0x0000:永远为0x0000002C。
0x0004:激活了窗口最大化时为0x00000002,其余时候是0x00000000。
0x0008:窗口关闭时的状态。使用窗口大小时为0x00000001,最小化时为0x00000002,最大化时为0x00000003。
如果当前状态为最小化0x00000002,下次打开窗口时:如果0x0004为0x00000002,就会以最大化状态打开窗口;如果0x0004为0x00000000,就会使用窗口大小还原窗口。
0x000C:最小化时为0xFFFF8300,其余时候是0xFFFFFFFF。
0x0010:永远为0xFFFFFFFF。
0x0014:永远为0xFFFFFFFF。
0x0018:永远为0xFFFFFFFF。
0x001C:窗口左上角像素的X-7,图中为0x000000C8(十进制200)。(可以得到结论,随机生成的位置即使最靠左上角也会在左侧空出7像素)
0x0020:窗口左上角像素的Y,图中为0x00000040(十进制64)。
0x0024:窗口右下角像素的X-8,图中为0x000003F8(十进制1016)。
0x0028:窗口右下角像素的Y-8,图中为0x000002C0(十进制704)。
使用注册表编辑器对应地修改这些数值,就可以精确调整UWP窗口大小和位置。
如果想要重置窗口大小和位置,删除“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ApplicationFrame\Positions”下的“[应用的PackageFamilyName]![应用的ID]”项,下次运行应用时就会重新生成默认值。
级别: 十方秋水

UID: 26730
精华: 0
发帖: 64722
威望: 148036 点
无痕币: 183 WHB
贡献值: 0 点
在线时间: 11530(时)
注册时间: 2008-05-03
最后登录: 2018-05-16

学习一下了
级别: 七朵秋菊
UID: 80465
精华: 0
发帖: 3972
威望: 54567 点
无痕币: 77314 WHB
贡献值: 0 点
在线时间: 315(时)
注册时间: 2009-03-22
最后登录: 2024-05-17

学习了,谢谢分享。
Total 0.048302(s) query 4, Time now is:05-19 08:39, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛