Ditto表结构解析
前言
搞清楚ditto的表结构,有如下作用:
- 可以对ditto进行二次开发。
- 对程序中的数据进行分析。
- 批量导入自己需要的数据。
这是比较小众的需求,所以在这里做一个记录,为自己所使用。
版本信息
- version 03.22.20.00 64bit
- sqlite Version 3.26.0
https://ditto-cp.sourceforge.io/
表结构
总共5张表
- Main
- Data
- MainDeletes
- CopyBuffers
- Types
主要的数据在Data
表,相关的列表数据在Main
表,其它的表是辅助。
Main 主信息表
重点关注
lID
主键mText
显示的文本bIsGroup
是否为grouplParentID
父结点IDlShortCut
快捷键
这些信息都可以在程序中的属性
中看到相应的数据。
这里会有两类信息,剪贴版信息的记录,组信息的记录,区别是bIsGroup 是为1。1-组记录。
剪贴版信息的记录归属到某组下,lParentID
中就会记录相应组的主ID。
1 |
|
Data 主数据表
lID
主键lParentID
关联主信息表的主键strClipBoardFormat
数据格式ooData
以BLOB类型存的数据
在程序中是无法预览ooData中的数据的,但最后复制出来的数据就是这个字段中的数据。
通过sqlite管理软件,可以看到里面的数据。
1 |
|
关于数据类型
剪贴板的数据类型定义在微软的文档中。
https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
程序中默认的有:
- CF_DIB
- CF_HDROP
- CF_TEXT
- CF_UNICODETEXT
- Rich Text Format
我们常用的有
- 文本类,
CF_TEXT
,CF_UNICODETEXT
,不同的是前者是ANSI text,后者是Unicode text。 - 文件类,
CF_HDROP
,是一个或者多个文件
其它
SQLite没有存储存储日期和/或者时间的存储类。
相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本,实数或者整数值
https://www.sqlite.org/lang_datefunc.html
后话
聊聊写这个文章的原因
在使用ditto时,发现功能:
输入查找的关键字与需要复制的关键字可以不一样。
于是可以满住这样一个需求,比如我要打一个人的名字,张三。
可以在 ditto中拷贝张三,设置找个这个关键字的为zs。
这样我在频繁输入张三时,可能用zs在ditto查找,并代替。
我有很多这样的关键字要录入到ditto中。
目前ditto支持导入单独一个剪贴版,但不支持其它文件格式的导入。
于是我分析下ditto的db格式,把需要写入的内容用其它程序到db中,就可以满住自己的需求。
这就是开源软件的好处之一吧