Claunahk小工具——ahk用户的quicker平替,简单但不简陋

缘起

@Kuma 同学热衷于想要搞个quicker平替, 近日打算开发Quicker平替软件,并加我微信让帮忙尝试一个claunch版本的quicker平替。

刚好我也有类似需求,因为quicker经常和我的ahk小工具冲突,但是quicker这样根据软件不同显示不同面板的功能又挺好用的。

简介

在claunch原本基础上,增强了以下功能:

  1. 根据不同窗口显示不同面板。
  2. 快速添加ahk脚本。
  3. 快速更换图标。
  4. 去除了claunch对于窗口激活的影响,实现了文本编辑等操作。
  5. 悬浮按钮功能。

使用说明

1. 下载、解压,运行claunahk.ahk,而不是claunch.exe。

image

2. 三重触发键

默认快捷键为xbutton1。

  1. 单击xbutton1==非锁定模式打开根据进程的面板,点击按钮后消失。
  2. 长按xbutton1==锁定模式打开根据进程的面板,适合连续使用。
  3. 双击xbutton1==以非锁定模式打开通用面板。

1

3. 创建进程面板

很简单,只需要将该面板命名为对应进程的exe名、"c "+class名 或"t "+ title名即可。
更复杂的窗口匹配规则(如正则匹配、group匹配等)可以自行修改claunahk.ahk添加特例。

image
这些信息可通过autohotkey的widowspy快捷获得。

4. 快速添加ahk脚本

按下快捷键win+n(new),打开ahk脚本默认存放文件夹、以及锁定模式打开根据进程的面板,方便快速新建脚本并拖到面板。

5. 快速更换图标(仅对 长按xbutton1触发的面板起效)

通过snipaste截图到剪贴板后,右键双击目标按钮,此时ico图标地址已放置在剪贴板,粘贴到文件名编辑框处即可。

2

另外,子文件夹"png转ico手动"中还有一个方便手动将网络下载的png图标转换成ico的工具,可以配合使用。

image

6. 悬浮按钮(仅对 长按xbutton1触发的面板起效)

将鼠标移动到目标按钮,然后按下快捷键win+f(float),即可生成一个悬浮按钮,可以随意拖动使用。悬浮按钮没有数量限制。

4


! 注意:后两个功能对于长按xbutton触发的面板(exe名为clahk.exe)不起效

这是因为,为了便于连续点击按钮时,不影响窗口激活状态,长按触发的面板进行了特殊处理,所以按键无法发送到clahk窗口上面。

下图示例连续点击按钮操作:

3

下载地址

链接: https://pan.baidu.com/s/125d5jpEFjQ4mR_c_IWvpRw?pwd=pntp 提取码: pntp 复制这段内容后打开百度网盘手机App,操作更方便哦

edit:12.10
更新了一个新版本的悬浮按钮,支持右键单击后锁定/解锁 对当前激活窗口的吸附。

吸附后,主窗口和按钮同步移动、同步最小化。
关闭主窗口,按钮自动关闭。
关闭按钮,不影响主窗口。

该地址==>dogbean.ysepan.com 下载悬浮按钮.exe,替换claunahk文件夹下原本的悬浮按钮.exe即可。

image

对于小白用户

推荐两款ahk傻瓜式创建器,

  1. GitHub - Pulover/PuloversMacroCreator: Automation Utility - Recorder & Script Generator

  1. GitHub - papple23g/ahkcompiler: AutoHotKey 語法產生器(線上網站)

image

打赏及代码定制

image

ahk代码定制:咸鱼搜索用户 豆子哆嗦

26 个赞

:+1: :+1: :+1: 还有这种骚操作。 :astonished:

找到个窗口吸附的脚本,可能对悬浮按钮有帮助。
[AHK]吸附窗口_ahk_class scitewindow-CSDN博客

这种创新值得期待!

这个悬浮按钮可以根据切换程序实现 自动显示隐藏吗?

你自己改代码呗。

感谢大大费心研究,虚心学习了

老哥,太神了,这个皮肤跟quicker面板好像,图标位置大小想弄多大弄多大,卸载quciker!

个人还是习惯使用右键长按触发窗口(并且公司鼠标没有侧键 :melting_face:),研究半天勉强实现了……编辑了一万遍帖子,感谢GPT4

非常感谢大神分享,惦记很久的功能了。

支持,支持~!

【脚本分享】WPS 首行缩进

SendInput,{Alt}
sendinput,o
SendInput,p
sendinput,{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}
SendInput,{2}{enter}
return
1 个赞

公文格式脚本,平替小恐龙公文排版插件
代码来自 ahk设置WPS办公自动化热键脚本(word/excel类似) - AutoHotkey Community

设置大标题

word := ComObjActive("kwps.Application")
	if word.selection.type =1  ;当前Word中未选择具体内容,为光标闪烁状态
	{
		word.Selection.MoveRight  ;向右移动1格光标
		word.Selection.MoveUp(unit := 4)  ;移动光标到段首
		word.Selection.MoveDown(unit := 4,,1)   ;选中光标到段尾的内容
	}
	word.Selection.ClearFormatting  ;清除格式
	word.Selection.Range.HighlightColorIndex := 0  ;背景色突出显示,不能通过清除格式去掉(注意不是底纹)
	word.Selection.ParagraphFormat.CharacterUnitLeftIndent := 0    ;左缩进、右缩进、首行缩进(注意:必须中文设置在前,英文设置在后)
	word.Selection.ParagraphFormat.CharacterUnitRightIndent := 0
	word.Selection.ParagraphFormat.CharacterUnitFirstLineIndent := 0
	word.Selection.ParagraphFormat.LeftIndent := 0
	word.Selection.ParagraphFormat.RightIndent := 0
	word.Selection.ParagraphFormat.FirstLineIndent := 0
	word.Selection.Font.Name := "方正小标宋简体"
	word.Selection.Font.Size := 22  ;二号
	word.Selection.ParagraphFormat.Alignment := 1   ;0左对齐,1居中,2右对齐,3两端对齐,4分散对齐
	word.Selection.ParagraphFormat.LineSpacingRule := 4     ;行距规则,单倍行距多倍行距等,依据菜单项从0到5
	word.Selection.ParagraphFormat.LineSpacing := 28    ;行距具体值
	MouseMove, 2, 2 , , R
	word :=""
Return

设置正文

word := ComObjActive("kwps.Application")
	word.Selection.ClearFormatting  ;清除格式
	word.Selection.Range.HighlightColorIndex := 0  ;背景色突出显示,不能通过清除格式去掉(注意不是底纹)
	word.Selection.ParagraphFormat.CharacterUnitLeftIndent := 0    ;左缩进、右缩进、首行缩进(注意:必须中文设置在前,英文设置在后)
	word.Selection.ParagraphFormat.CharacterUnitRightIndent := 0
	word.Selection.ParagraphFormat.CharacterUnitFirstLineIndent := 2
	word.Selection.ParagraphFormat.LeftIndent := 0
	word.Selection.ParagraphFormat.RightIndent := 0
	word.Selection.ParagraphFormat.FirstLineIndent := 0
	word.Selection.Font.Name := "仿宋_GB2312"
	word.Selection.Font.Size := 16  ;三号
	word.Selection.ParagraphFormat.LineSpacingRule := 4     ;行距规则,单倍行距多倍行距等,依据菜单项从0到5
	word.Selection.ParagraphFormat.LineSpacing := 28    ;行距具体值
	MouseMove, 2, 2 , , R
	word :=""
Return
2 个赞

WPS的表格,新建标签页,命名为et

合并单元格居中

SendInput,{Alt}
sendinput,h
SendInput,m
sendinput,c
return

设置单元格底色

ket := ComObjActive("Ket.Application")
	if OnOff := !OnOff
	{
		ket.Selection.Interior.Colorindex := 6 
	}
	else
	{
		ket.Selection.Interior.Colorindex :=  0
	}
	ket :=""
return

建议放到GitHub上面

账号忘了好几年。。。我试试找回一下。。。

;---- 在网页中搜索选中文字 ------
{
Send, ^c
Sleep 50
Run, https://www.bing.com/search?q=%clipboard%
;Run, https://www.baidu.com/s?wd=%clipboard%
;Run, http://www.google.com/search?q=%clipboard%
Return
}

【C#脚本】数字转金额大写
引擎与脚本下载

用法:将 csws.exe 数字转大写金额.cs 注册到面板

视频演示

脚本代码

using System;
using System.Windows.Forms;

public class Script
{
     

    static public void Main()
    {
        string t=Clipboard.GetText();
		decimal num=decimal.Parse(t);
       // MessageBox.Show(CmycurD(num));
	   //SendKeys.Send(CmycurD(num));
        Clipboard.SetText(CmycurD(num));
    }
	
	/// <summary> 
	/// 转换人民币大小金额 
	/// </summary> 
	/// <param name="num">金额</param> 
	/// <returns>返回大写形式</returns> 
	static public  string CmycurD(decimal num)
	{
		string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字 
		string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 
		string str3 = "";    //从原num值中取出的值 
		string str4 = "";    //数字的字符串形式 
		string str5 = "";  //人民币大写金额形式 
		int i;    //循环变量 
		int j;    //num的值乘以100的字符串长度 
		string ch1 = "";    //数字的汉语读法 
		string ch2 = "";    //数字位的汉字读法 
		int nzero = 0;  //用来计算连续的零值是几个 
		int temp;            //从原num值中取出的值 
	 
		num = Math.Round(Math.Abs(num), 2);    //将num取绝对值并四舍五入取2位小数 
		str4 = ((long)(num * 100)).ToString();        //将num乘100并转换成字符串形式 
		j = str4.Length;      //找出最高位 
		if (j > 15) { return "溢出"; }
		str2 = str2.Substring(15 - j);   //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 
	 
		//循环取出每一位需要转换的值 
		for (i = 0; i < j; i++)
		{
			str3 = str4.Substring(i, 1);          //取出需转换的某一位的值 
			temp = Convert.ToInt32(str3);      //转换为数字 
			if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
			{
				//当所取位数不为元、万、亿、万亿上的数字时 
				if (str3 == "0")
				{
					ch1 = "";
					ch2 = "";
					nzero = nzero + 1;
				}
				else
				{
					if (str3 != "0" && nzero != 0)
					{
						ch1 = "零" + str1.Substring(temp * 1, 1);
						ch2 = str2.Substring(i, 1);
						nzero = 0;
					}
					else
					{
						ch1 = str1.Substring(temp * 1, 1);
						ch2 = str2.Substring(i, 1);
						nzero = 0;
					}
				}
			}
			else
			{
				//该位是万亿,亿,万,元位等关键位 
				if (str3 != "0" && nzero != 0)
				{
					ch1 = "零" + str1.Substring(temp * 1, 1);
					ch2 = str2.Substring(i, 1);
					nzero = 0;
				}
				else
				{
					if (str3 != "0" && nzero == 0)
					{
						ch1 = str1.Substring(temp * 1, 1);
						ch2 = str2.Substring(i, 1);
						nzero = 0;
					}
					else
					{
						if (str3 == "0" && nzero >= 3)
						{
							ch1 = "";
							ch2 = "";
							nzero = nzero + 1;
						}
						else
						{
							if (j >= 11)
							{
								ch1 = "";
								nzero = nzero + 1;
							}
							else
							{
								ch1 = "";
								ch2 = str2.Substring(i, 1);
								nzero = nzero + 1;
							}
						}
					}
				}
			}
			if (i == (j - 11) || i == (j - 3))
			{
				//如果该位是亿位或元位,则必须写上 
				ch2 = str2.Substring(i, 1);
			}
			str5 = str5 + ch1 + ch2;
	 
			if (i == j - 1 && str3 == "0")
			{
				//最后一位(分)为0时,加上“整” 
				str5 = str5 + '整';
			}
		}
		if (num == 0)
		{
			str5 = "零元整";
		}
		return str5;
	}
}

这延迟,也太大了

没办法,不是直接运行代码,通过启动器比quicker中间多了好几步

不过大部分自动化动作不差这点延迟

需要低延迟的还是用快捷键比较快,鼠标移动点击本来就得个一秒多了

请问下,如何让代码仅在指定的窗口运行?
网上找的:

#IfWinActive ahk_exe msedge.exe
	Send, ^+i
	Return
#IfWinActive

没有效果,在其它窗口同样可以运行成功。
感谢楼下解决:

;---- 在指定的软件窗口中运行快捷键 ------
If WinActive("ahk_exe msedge.exe")
Send, ^+i