PADS在注册表中的菜单栏数据

位于

[HKCU\Software\Mentor Graphics\PADS9_5\PADS Layout\Workspaces\ENU\Default\BCGToolBar-593980]

下的二进制数据项:Buttons。

 字符串的表达 

该二进制数据记录字符串时,在字符串数据头部增加1byte用来记录长度。

05,26,46,69,6c,65

首位05即表示接下来这个字符串的长度为5byte,“&File”。

 菜单项的表达 

记录菜单的数据长度不定,结构如下。

0b,00,00,00, // CommandId 菜单的命令id,特殊值:FF FF FF FF为分隔线;00 00 00 00为拥有子菜单的菜单项。当commandId查找不到对应的command时,该菜单项会变成不可用。这是自定义菜单异常的常见情况。
00,00,00,00, // MenuItemType 通常都是全零,分隔线和最近使用的Macros,此处为00 00 04 00。
ae,00,00,00, // IconId 若菜单有图标,这里会存放图标信息,否则为FF FF FF FF。
04,26,4e,65,77, // Text 菜单显示的文字。
00,00,00,00,00,00,00,00, // IsCustomed PADS的菜单项此处全零。自定义的菜单都为01 00 00 00 00 00 00 00。
00,00,00,00,01,00,00,00, // IconType 有图标值 00 00 00 00 01 00 00 00;没图标为 10 00 00 00 00 00 00 00
01,00,00,00,00,00,00,00, // 未知,始终为该值
00,00,00,00,01,00,00,00, // 未知,始终为该值
00,00 // 子菜单的个数

菜单项之间的分隔

01,80,// 01 80 表示接下来还有菜单项,00 00 表示菜单项描述结束。

如果把最后一个菜单之前的分隔标记01 80替换为 00 00的话:

1. 启动PADS后最后一个菜单会消失掉,因为解析到此就结束了;最后一个菜单不会被加载到PADS界面中;

2. 在关闭PADS后,因为关闭时PADS会使用当前的UI重新写入注册表,因此原先位于 00 00 之后的二进制数据会全部被删掉。最后一个菜单的数据也就无法恢复了。

Buttons 数据开始的部分 

00,20,00,00,01,00,00,00,07,00, // 未知
ff,ff,01,00, // 未知
16,00, // 字符串长度,这里用了 2byte记录长度,而不是1byte。
43,42,43,47,50,54,6f,6f,6c,62,61,72,4d,65,6e,75,42,75,74,74,6f,6e, // CBCGPToolbarMenuButton

Buttons数据结束的部分 

最后一个菜单项的数据结束后,会有2byte 0表示其后再无menuitem。然后才是

00,00 // 表示后续没有菜单项了

00,00, // 未知
08,4d,65,6e,75,20,42,61,72,  // Menu Bar
6d,00,00,00 // 未知
时间: 2024-08-25 02:14:01

PADS在注册表中的菜单栏数据的相关文章

VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)

注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.比如我们打开一个记事本,调整其窗口大小,使用完毕后关闭记事本,下次打开时大小和上次关闭前的大小和在屏幕上的位置是相同.这些位置和大小信息就是在记事本关闭时保存到注册表中,下次打开时我们从注册表中取出这些数据,并按照这些数据显示记事本程序的大小和位置信息. 下面教你如何使用GetProfileInt,WriteProfileInt,GetPro

[转]如何在注册表中进行查找

1 2 3 4 5 6 7 分步阅读 经常碰到网友提问,电脑一开机,就会弹出一些提示,说某个文件找不到,可是,找又找不到,不知如何是好. 其实,这都是某些软件被卸载后,留下的残余,一般是保留在注册表中某一个项中,象这样的问题,可以到注册表去找,因为注册表很庞大,要找一个项目非常难,必须采用查找的方法,如何在注册表中进行“查找”.本文就介绍查找方法 工具/原料 电脑 方法/步骤 在注册表中进行查找的步骤: 1,要搜索注册表,必须先进入注册表,进入方法,在开始菜单中打开“运行”,也可以直接按Win+

光驱错误:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备

现象:Windows 无法启动这个硬件设备,卸载后重新扫描还是显示叹号.设备管理器光驱驱动右键属性,提示错误信息:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备. (代码 19) 解决方法: 1. 点开"开始"-运行regedit.exe,进入注册表编辑器,到左边的项目栏里找到HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\Class\{4D36E965-E325-11C E-BFC1-0800

用javascript技术读取注册表中软件安装位置并启动本地软件

1.首先读取注册表中本地软件安装的位置,如果未安装则无就跳转到下载页面. 2.启动软件,关闭页面. 3.如报错提示. <SCRIPT language=javascript>  <!--   function killErrors(){  alert("请将您浏览器Internet选项中的“对没有标记为安全的ActiveX控件进行初始化和脚本运行”设置为“启用”!/n/n然后刷新本页登陆!");  return true;}   window.onerror = ki

usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备(代码 19)

今天解决了一晚上,USB驱动的问题: 在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始-->运行-->regedit),依次展开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/在这下面有很多用“{}”括起来的项,一个一个的点开,看右面空口有没有“通用串行总线控制器”这些文字,在右面窗

定位表中的行数据存放于哪一个具体的datafile上

副标题:用一个PL/SQL查出表中的行数据存放在哪个具体的datafile中 经常有遇到做DBA的朋友问,该如何知道自己插入的某一行数据,是存在了数据库中的哪一个数据文件(datafile)上了,回答是肯定可以的.在此,就将该方法写出来供更多的朋友使用. 1.正常查询步骤 1.1.先查到表上行数据的ROWID select rowid from tivoli.test_db_avg1 where rownum =1 输出值:   AAAQ0mAAEAAAAhLAAA 1.2.根据ROWID定位到

清除oracl中有主外键关联的表中的部分数据。

1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ' as v_sql from user_constraints where CONSTRAINT_TYPE='R') loop EXECUTE IMMEDIATE c.v_sql;end loop;end;2.清空数据源.清空所有数据.一般情况是对表进行条件删除.begin for ec in (

在注册表中无Python3.5安装路径的情况下安装pywin32-

当安装pywin32出现Python Version 3.5 required which was not found in the registry的时候表面注册表中没有Python3.5的安装路径.  我出现这种情况是因为我直接用的Anaconda所以注册表没有注册  解决办法:  1. 先在注册表中写入Python3.5的安装路径.我在网上找到了注册表注册的代码贴出来供大家使用. import sys from winreg import * # tweak as necessary ve

MSSQL如何在没有主键的表中删除重复数据

为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create database testdb use testdb ; go create table DupsNoPK (Col1 int Null, Col2 char(5) Null ); go insert DupsNoPK(Col1,Col2) Values(1,'abc'), (2,'abc'), (2,'abc'), (2,'abc'), (7,'xyz'), (7,'xyz'); 为了验证表确实有重