吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2510|回复: 16
收起左侧

[其他原创] 用aardio开发一个剪切板词库收集器

  [复制链接]
傻瓜炒蛋 发表于 2024-1-12 21:41
本帖最后由 傻瓜炒蛋 于 2024-1-12 21:54 编辑

最近用影子输入法习惯了,里面有个很好用的功能:复制过的文本会保存在一个sqlite表里,可以直接在输入法里,选择这些复制过的文本。
后来一问,身边不少人有这些需求,但是又想换输入法。
然后我就想着自己能不能做一个。
趁着有空,就用aardio,先练习练习试着做一个。
大致效果如下,

软件实例

软件实例



带托盘,最小化后,隐藏在任务栏,只有一个图标
240112_214028.gif

目前还没做好导出的功能,不过能进行简单的管理了

代码如下
[Asm] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
winform = win.form(text="剪切板词库收集器";right=656;bottom=432)
winform.add(
btnDelete={cls="button";text="删除选中";left=392;top=8;right=512;bottom=48;font=LOGFONT(h=-14);z=6};
choseid={cls="edit";left=349;top=18;right=372;bottom=42;edge=1;readonly=1;z=7};
expbutton={cls="button";text="导出词库";left=518;top=8;right=638;bottom=48;dr=1;dt=1;font=LOGFONT(h=-14);z=2};
listview={cls="listview";left=10;top=54;right=643;bottom=405;db=1;dl=1;dr=1;dt=1;edge=1;z=1};
numtxt={cls="static";left=103;top=21;right=133;bottom=37;color=8388608;dl=1;dt=1;font=LOGFONT(weight=700);transparent=1;z=5};
static={cls="static";text="今天新增";left=50;top=21;right=139;bottom=42;dl=1;dt=1;transparent=1;z=3};
static2={cls="static";text="个词语";left=136;top=21;right=225;bottom=42;dl=1;dt=1;transparent=1;z=4}
)
/*}}*/

import sqlite
import console;
import win.clip.viewer;
viewer = win.clip.viewer(winform);

var db = sqlite("/clipwords.db"); //创建数据库
if( not db.existsTable("historywords") ){ 
	db.exec( "CREATE TABLE [historywords](`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title`  TEXT(400), year);"); //创建表本的数值
}  

//剪切板动作开始
viewer.onDrawClipboard=function(){
	var str = win.clip.read();	
	//winform.choseid.text = str;
	console.clearScreen();
	console.log(str);
	
	//词语入库
	var cmd = db.prepare("REPLACE INTO historywords VALUES (@id, @title,@year);" ) 
	cmd.step(
		title = str;
		year = time.now();	
	)   
	load_db();		
	load_count();
	
}
//剪切板动作结束


import win.ui.grid;
var grid = win.ui.grid(winform.listview);//创建数据视图
grid.setReadonlyColumns(1);//可选设置禁止编辑的列,设为 -1 禁止编辑所有列
//grid.setColumns({"ID";"日期";"标题"}) //可选自定义显示列名
winform.listview.insertColumn("编号",40,,0/*_LVCFMT_LEFT*/) 
winform.listview.insertColumn("标题",430,,0/*_LVCFMT_LEFT*/) //第二列开始可以使用_LVCFMT_CENTER居中
winform.listview.insertColumn("时间",250,,0/*_LVCFMT_LEFT*/) //第二列开始可以使用_LVCFMT_CENTER居中

//直接支持常用数据库的 getTable 函数返回的数据格式

function load_db(){
	var dataTable = db.getTable("SELECT * FROM [historywords] order by id desc");
grid.setTable( dataTable )
}

//加载数据表
load_db();

function load_count(){
	var result  = db.stepQuery("SELECT COUNT(id) as todaynum FROM historywords WHERE year >= date('now', 'localtime'); ")
	if(result){
		console.log(result.todaynum)
		winform.numtxt.text = result.todaynum;
	}
	
}

load_count();

//当前焦点项变更时触发此事件
winform.listview.onFocusedChanged = function(item,subItem,nmListView){
	winform.choseid.text = winform.listview.getItemText(item,subItem)
}
winform.show();

import win.ui.menu;
import win.util.tray;

winform.btnDelete.oncommand = function(id,event){
	
	db.exec("DELETE FROM ?? WHERE id=?;",{ "historywords",winform.choseid.text} );
	
	load_db();
	load_count();
	winform.choseid.text = winform.choseid.text-1;
}

winform.onMinimize = function(lParam){
	winform.tray = win.util.tray(winform);
	winform.tray.tip = "剪切板词库";//设置鼠标提示 
	winform.tray.pop('隐藏在这里运行',"剪切板词库");
	winform.show(false); //隐藏窗口
	return true;//阻击默认消息传递,取消最小化过程

}
winform.onTrayMessage = {
	[0x205/*_WM_RBUTTONUP*/  ] = function(wParam){ 
	    //弹出托盘菜单以前,一定要前置主窗口中,避免不点击菜单不会消失,父窗口隐藏也要这样做
	    win.setForeground(winform.hwnd)
	     
		/*
		下面创建托盘弹出菜单。
		如果程序要开机启动到托盘,最好在这里创建菜单,在用户点击前不要创建菜单,
		避免系统启动时 DPI 缩放前创建的菜单字体偏小(出现这情况的机率很小)。
		如果不想重复创建菜单最好写到一个库里,然后在这里 import 即可避免上述问题。
		*/
		import win.ui.menu;
		
		winform.popmenu = win.ui.popmenu(winform);//创建弹出菜单
		winform.popmenu.add('&主窗口',function(id){
			//在下面输入菜单响应代码
			winform.show(true);
		});
		winform.popmenu.add();//分隔线
		winform.popmenu.add('&退出',function(id){ winform.close() })	    
	    winform.popmenu.popup();
	    winform.popmenu.close();
	};
	[0x202/*_WM_LBUTTONUP*/] = function(wParam){ 
		
	};
	[0x203/*_WM_LBUTTONDBLCLK*/] = function(wParam){ 
			winform.show(true);
	};
	[0x404/*_PARAM_DESTROY*/] = function(wParam){ 
		
	};
	[0x405/*_PARAM_CLICKED*/] = function(wParam){ 
		
	};
}
return win.loopMessage();

免费评分

参与人数 4吾爱币 +10 热心值 +3 收起 理由
xy506 + 1 + 1 谢谢@Thanks!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yanjia5286 + 1 热心回复!
niecewo + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

YWQ8 发表于 2024-1-13 00:09
支持支持
42328669425 发表于 2024-1-13 00:12
孤狼微博 发表于 2024-1-13 00:29
keshi0 发表于 2024-1-13 01:04
顶起来!百度输入法无法手机、电脑同步,想换了
Zercher 发表于 2024-1-13 01:10
你们的电脑有win11吗? win 11 现在支持剪切板有历史记录了 快捷键是win + v
wasm2023 发表于 2024-1-13 08:50
感谢楼主分享,不错的思路
iooowjy 发表于 2024-1-13 09:14
这个想法不错,感谢楼主分享
1045837055lucy 发表于 2024-1-13 09:39
刚试了下,很实用。如果加上双击复制已保存的内容就更好了
小蓝人 发表于 2024-1-13 09:47
Zercher 发表于 2024-1-13 01:10
你们的电脑有win11吗? win 11 现在支持剪切板有历史记录了 快捷键是win + v

可以保存的记录,数量太少了。我现在用的是DITTO这个。可以保存好多条记录。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表