ditto 添加统计粘贴次数功能
通过观察ditto的表发现, 可以添加触发器进行统计粘贴次数的功能,不需要用源码
Ditto 是一款强大的 Windows 剪贴板增强工具,它支持64位操作系统,而且完全免费,绿色开源,支持中文,而且还有免安装的绿色版本。
开启 Ditto 后,不会有任何程序界面出现,它只是默默地在系统右下角弹出了一个蓝色的托盘图标,这时候你复制任何内容到剪贴板都会被 Ditto 一一记录。如果你什么时候想找到它,就可以按 Ctrl+`,当中的每条内容都可以供你选择性的重新复制。

使用navicat连接数据库

主要使用的表
Types
MainDeletes
Main
Data
CopyBuffers
通过观察Main表发现数据库结构
/*
Navicat Premium Data Transfer
Source Server : ditto
Source Server Type : SQLite
Source Server Version : 3035005 (3.35.5)
Source Schema : main
Target Server Type : SQLite
Target Server Version : 3035005 (3.35.5)
File Encoding : 65001
Date: 17/04/2023 10:44:23
*/
PRAGMA foreign_keys = false;
-- ----------------------------
-- Table structure for Main
-- ----------------------------
DROP TABLE IF EXISTS "Main";
CREATE TABLE "Main" (
"lID" INTEGER PRIMARY KEY AUTOINCREMENT,
"lDate" INTEGER,
"mText" TEXT,
"lShortCut" INTEGER,
"lDontAutoDelete" INTEGER,
"CRC" INTEGER,
"bIsGroup" INTEGER,
"lParentID" INTEGER,
"QuickPasteText" TEXT,
"clipOrder" REAL,
"clipGroupOrder" REAL,
"globalShortCut" INTEGER,
"lastPasteDate" INTEGER,
"stickyClipOrder" REAL,
"stickyClipGroupOrder" REAL,
"MoveToGroupShortCut" INTEGER,
"GlobalMoveToGroupShortCut" INTEGER
);
-- ----------------------------
-- Auto increment value for Main
-- ----------------------------
UPDATE "sqlite_sequence" SET seq = 50355 WHERE name = 'Main';
-- ----------------------------
-- Indexes structure for table Main
-- ----------------------------
CREATE INDEX "Main_CRC"
ON "Main" (
"CRC" ASC
);
CREATE INDEX "Main_ClipGroupOrder"
ON "Main" (
"clipGroupOrder" DESC
);
CREATE INDEX "Main_ClipOrder"
ON "Main" (
"clipOrder" DESC
);
CREATE UNIQUE INDEX "Main_ID"
ON "Main" (
"lID" ASC
);
CREATE INDEX "Main_InGroup2"
ON "Main" (
"lParentId" ASC,
"stickyClipGroupOrder" DESC,
"bIsGroup" ASC,
"clipGroupOrder" DESC
);
CREATE INDEX "Main_IsGroup"
ON "Main" (
"bIsGroup" DESC
);
CREATE INDEX "Main_MoveToGroup"
ON "Main" (
"MoveToGroupShortCut" DESC,
"GlobalMoveToGroupShortCut" DESC
);
CREATE INDEX "Main_ParentId"
ON "Main" (
"lParentID" DESC
);
CREATE INDEX "Main_ShortCut2"
ON "Main" (
"lShortCut" DESC,
"globalShortCut" DESC
);
CREATE INDEX "Main_TopLevel"
ON "Main" (
"stickyClipOrder" DESC,
"bIsGroup" ASC,
"clipOrder" DESC
);
CREATE INDEX "Main_TopLevelParentID"
ON "Main" (
"lParentId" ASC,
"stickyClipOrder" DESC,
"bIsGroup" ASC,
"clipOrder" DESC
);
-- ----------------------------
-- Triggers structure for table Main
-- ----------------------------
CREATE TRIGGER "delete_data_trigger"
BEFORE DELETE
ON "Main"
FOR EACH ROW
BEGIN
INSERT INTO MainDeletes VALUES(old.lID, datetime('now'));
END;
PRAGMA foreign_keys = true;
通过表结构发现里面是有一个触发器进行记录删除时间的
同理可以增加一个触发器,记录更新时间,就可以记录下粘贴的使用id和时间
添加触发器
-- 添加 ditto 触发器
DROP TRIGGER "main"."update_date_trigger"
CREATE TRIGGER "main"."update_date_trigger"
BEFORE UPDATE
ON "Main"
BEGIN
-- 这里是因为粘贴一次,会进行两次update, 所以这里删除掉已经记录的时间,避免生成两个一样的记录
DELETE FROM MainPaste WHERE lastPasteDate=old.lastPasteDate;
-- 记录一次粘贴记录
INSERT INTO MainPaste VALUES(old.lID, old.lastPasteDate);
END
COMMIT;

统计粘贴次数

测试结论,通过粘贴四次 “好的”, 可以查询出复制了四次
-- 统计粘贴次数
select t1.*, t2.mText from
( select clipID, count(clipID) cnt from MainPaste group by clipID order by count(clipID) desc) t1,
Main t2
where t1.clipID = t2.lID;
统计的作用
- 通过一段时间的使用,可以记录使用次数最高的记录
- 使用了如果一年多,则 ditto.db 的文件会特别的大。 则根据使用记录次数, 可以删除一些不常用的数据, 避免空间浪费
ditto 添加统计粘贴次数功能的更多相关文章
- Java web--Filter过滤器分IP统计访问次数
分IP统计访问次数即网站统计每个IP地址访问本网站的次数. 分析 因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便. 因为需要分IP统计,所以可以在过滤器中创建 ...
- awk 统计出现次数--转
知识点: 1)数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常称为键,数组元素的键和值存储在Awk程序 ...
- Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性
简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...
- web_02Java ee实现验证码,网站访问次数功能
Web Web_02版本: 实现功能 1,验证码 2,网站访问次数统计 设计内容 1,servlet 2,jsp 3,js *重点 1,验证码相关: 1,Servlrt类实现验证码的生成 CheckC ...
- 利用 clipboardData 在网页中实现截屏粘贴的功能
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 为现有图像处理程序添加读写exif的功能
为现有图像处理程序添加读取exif的功能 exif是图片的重要参数,在使用过程中很关键的一点是exif的数据能够和图片一起存在.exif的相关功能在操作系统中就集成了,在csharp中也似乎有了实现. ...
- FastReport 中添加二维码功能.(Delphi)
http://www.cnblogs.com/fancycloud/archive/2011/07/24/2115240.html FastReport 中添加二维码功能.(Delphi) 在实际 ...
- phpcms 移植【添加相关文章】功能
添加相关文章功能相当有用,移植一个过来基本上可以实现比较复杂的页面内包含分类功能,做二次开发时可以省下不少力气. 用例:如果一个产品,属于一个厂家,而这个厂家是动态添加的,既不是一个分类,而是一个厂家 ...
- TogetherJS – 酷!在网站中添加在线实时协作功能
TogetherJS是一个免费.开源的 JavaScript 库,来自 Mozilla 实验室,可以实现基于 Web 的在线协作功能.把 TogetherJS 添加到您的网站中,您的用户可以在实时的互 ...
- Swift - 给表格添加移动单元格功能(拖动行)
1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,可以看到单元格后面出现拖动按钮 (3)鼠标按住拖动按钮,可以 ...
随机推荐
- vector的使用方法
vector是STL容器的可变长度数组.可变长度数组的头文件是<vector>,有以下常见的使用方法: 1.vector<int> v(N,i):建立一个可变长度数组v,内部元 ...
- 导出数据库表以及备注为excel
import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.D ...
- 对css及css3的大致整理(查漏补缺)
- Docker 修改容器中的mysql密码
1.查看容器服务 docker ps2.进入mysql容器 docker exec -it mysql /bin/bash 注:mysql为容器的名字 3.登录MySQL mysql -u root ...
- C语言中~与!的区别
! 是逻辑非or否定 凡是a的值不为0的,!a 就等于0: 如果a的值为0,则 !a 的值为1 而~这个是 按位取反 比如 int a=2 ; 用二进制表示为00 00 00 10; 则 !a ...
- curl解决乱码
mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');
- DRF的序列化器Serializer
一 序列化器的作用 1. 序列化,序列化器会把模型对象转换成字典,经过视图中response对象以后变成json字符串 2. 反序列化,视图中request会把客户端发送过来的数据转换成字典,序列化器 ...
- c++中文编码格式
c++程序中涉及到中文字符的输入输出以及其他操作经常会出现乱码.乱码主要是由于程序的源文件编码.可执行文件编码以及程序运行环境的编码不匹配导致.比如,c++源程序文件编码为GB18030, 在源程序中 ...
- Android笔记--案例:找回密码
找回密码 具体实现: 登录成功: 报告密码不同: 报告验证码错误: 代码相关: 找回密码的界面很简单,不细说了,直接写就行 找回密码的逻辑实现: 下一次就去写数据存储啦! 拜拜!
- [WinUI 3] 如何利用D3D11在SwapChainPanel控件上绘制OpenGL(Uwp通用)
预览 技术实现 看过我上篇在 WPF 中实现 OpenGL 与 D3D 渲染的同学应该知道,我是依靠 WGL 中 WGL_NV_DX_interop 扩展与 D3D Surface 关联并在使用该 S ...