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

If WinActive ahk_exe msedge.exe
Send, ^+i

#if 只对快捷键有效果

1 个赞

感谢 dog 兄解答。

不显示悬浮窗标题栏。

配套:

1、移动
窗口移动大家应该都有。

2、关闭

#!RButton:: ;WIN + Alt + 右键 关闭鼠标下的窗口 (方便关闭没有窗口标题栏的悬浮窗口)
MouseGetPos, MouseX, MouseY, MouseWin
WinClose, ahk_id %MouseWin%
return

我还是对在指定的软件窗口中运行代码不了解,不然可以定义 左键拖动,右键关闭,这样才完美。

1 个赞

WPS自带数字转大写金额

SendInput,{Alt}
sendinput,n
SendInput,sn
sendinput,{Tab}
SendInput,{Down}{Down}{Down}{Down}{Down}{Down}{Down}{Down}{Down}{enter}
return
1 个赞

其实想想,通用面板还是很有作用的,我有个设想。

同时启动两个 CLaunch,使用两套配置,一个用于通用,一个用于活动窗口的显示。

有个难题,这两个面板显示的位置不好设置。

这个我一开始就想过,不太现实。
所以设计了双击到达通用面板的快捷键。

思维一下没有反应过来,:upside_down_face:还在 Quicker 上,双击挺好的。
因为小工具多,Quicker 反而不太适用。

其实说实话,quicker好就好在有一个生态,不用麻烦去再造轮子,捯饬捯饬还能用用,用ahk的话,缺乏一个市场,quicker的功能其实也没有太大创新,就是应用市场非常好用,我觉得ahk也需要有一个这样的东西

一个 ahk 只会改改快捷键用户的发言。

1、开发者的热情:

quicker:开发者专职,有问必答,用户比较集中。我出钱了,我是爷。 :rofl:

ahk:自己去翻文档,自己去改,我没时间。基本上自己写的自己用,哪天不爽了就提桶跑路。后期维护基本不可能的。

2、用户群体的粘性:

quicker:海量分类好的脚本,能放弃这个,但不能放弃那个。最后只能:让我想想这个功能在 quicker 上面能不能实现?

ahk:单个的脚本分散,很多不能合并的脚本(普通用户根本没这个能力),就会在托盘栏出现无数个小图标。一旦出现更好的软件能取代这个脚本,马上就会放弃。再就是 v1 v2的问题,这又分成了两个用户群体。

喜欢折腾的人总是能找到适合自己的方法 :joy:

【C#脚本】删除换行

using System;
using System.Windows.Forms;


public class Script
{
  
    static public void Main()
    {
         string t=Clipboard.GetText();
			t=t.Replace("\n", "").Replace(" ","").Replace("\t","").Replace("\r","");
			Clipboard.SetText(t);
    }
	 
}

1 个赞

【C#脚本】生成/识别二维码

生成

//css_args /c:0, /inmem
using System;
using System.Windows.Forms;
using System.Drawing;
using ZXing;

public class Script
{
     

    static public void Main()
    {
        using (Form form = new Form()) {
				Image img = GetQRCodeByZXingNet(Clipboard.GetText(), 400, 400);
			
				Clipboard.SetImage(img);
				
			    form.StartPosition = FormStartPosition.CenterScreen;
			    form.Size = img.Size;
			
			    PictureBox pb = new PictureBox();
			    pb.Dock = DockStyle.Fill;
				pb.SizeMode =PictureBoxSizeMode.Zoom;
			    pb.Image = img;
				
			    form.Controls.Add(pb);
			    form.ShowDialog();
			}
    }
	
	 /// <summary>
          /// 生成二维码图片
          /// </summary>
          /// <param name="strMessage">要生成二维码的字符串</param>
          /// <param name="width">二维码图片宽度</param>
          /// <param name="height">二维码图片高度</param>
         /// <returns></returns>
         static public Bitmap GetQRCodeByZXingNet(String strMessage,Int32 width,Int32 height)
          {
             Bitmap result = null;
             try
             {
                 BarcodeWriter barCodeWriter = new BarcodeWriter();
                 barCodeWriter.Format = BarcodeFormat.QR_CODE;
                 barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
                 barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
                 barCodeWriter.Options.Height = height;
                 barCodeWriter.Options.Width = width;
                 barCodeWriter.Options.Margin = 0;
                 ZXing.Common.BitMatrix bm = barCodeWriter.Encode(strMessage);
                 result = barCodeWriter.Write(bm);
             }
             catch (Exception ex)
             {
                 //异常输出
             }
             return result;
         }
}

识别

//css_args /c:0, /inmem
using System;
using System.Windows.Forms;
using System.Drawing;
using ZXing;

public class Script
{
     

    static public void Main()
    {
        BarcodeReader reader = new BarcodeReader();
		reader.CharacterSet  = "UTF-8";
		Bitmap map = new Bitmap(Clipboard.GetImage());
		Result result = reader.Decode(map);
		MessageBox.Show(result.Text);
		Clipboard.SetText(result.Text);
    }
  
}

视频演示

1 个赞

感谢无私分享,谢谢!
展开一下,可以 以标点符号来换行,方便制作歌词、字幕……

PixPin_2023-12-06_23-13-58

代码
; F2::	;<-- F2 替换所有标点符号,并在标点符号处换行。(若单独使用则打开)

; send,^c ;直接替换选中文字。(若仅粘贴时使用,注释这两行)
; sleep,200
{
Loop
{
StringReplace, clipboard, clipboard, `, , `r`n, UseErrorLevel		;替换英文逗号
StringReplace, clipboard, clipboard, , , `r`n, UseErrorLevel		;替换中文逗号
StringReplace, clipboard, clipboard, `; , `r`n, UseErrorLevel		;替换英文分号
StringReplace, clipboard, clipboard, ; , `r`n, UseErrorLevel		;替换英文分号
StringReplace, clipboard, clipboard, . , `r`n, UseErrorLevel		;替换英文句号
StringReplace, clipboard, clipboard, 。 , `r`n, UseErrorLevel		;替换中文句号
StringReplace, clipboard, clipboard, : , `r`n, UseErrorLevel		;替换英文冒号
StringReplace, clipboard, clipboard, : , `r`n, UseErrorLevel		;替换中文冒号
StringReplace, clipboard, clipboard, ‘’ , `r`n, UseErrorLevel		;替换中文双引号1
StringReplace, clipboard, clipboard, “ , `r`n, UseErrorLevel		;替换中文双引号2
StringReplace, clipboard, clipboard, ” , `r`n, UseErrorLevel		;替换中文双引号3
StringReplace, clipboard, clipboard, ' , `r`n, UseErrorLevel		;替换英文双引号
StringReplace, clipboard, clipboard, 、 , `r`n, UseErrorLevel		;替换中文顿号
StringReplace, clipboard, clipboard, / , `r`n, UseErrorLevel		;替换右斜杠
StringReplace, clipboard, clipboard, \ , `r`n, UseErrorLevel		;替换左斜杠
StringReplace, clipboard, clipboard, - , `r`n, UseErrorLevel		;替换短横线
StringReplace, clipboard, clipboard, —— , `r`n, UseErrorLevel		;替换长横线
StringReplace, clipboard, clipboard, = , `r`n, UseErrorLevel		;替换等号
StringReplace, clipboard, clipboard, + , `r`n, UseErrorLevel		;替换加号
StringReplace, clipboard, clipboard, ( , `r`n, UseErrorLevel		;替换中文左括号
StringReplace, clipboard, clipboard, ) , `r`n, UseErrorLevel		;替换中文右括号
StringReplace, clipboard, clipboard, ( , `r`n, UseErrorLevel		;替换英文左括号
StringReplace, clipboard, clipboard, ) , `r`n, UseErrorLevel		;替换英文右括号
StringReplace, clipboard, clipboard, 【 , `r`n, UseErrorLevel		;替换中文【
StringReplace, clipboard, clipboard, 】 , `r`n, UseErrorLevel		;替换中文】
StringReplace, clipboard, clipboard, [ , `r`n, UseErrorLevel		;替换[
StringReplace, clipboard, clipboard, ] , `r`n, UseErrorLevel		;替换]
StringReplace, clipboard, clipboard, ! , `r`n, UseErrorLevel		;替换英文感叹号
StringReplace, clipboard, clipboard, ! , `r`n, UseErrorLevel		;替换中文感叹号
StringReplace, clipboard, clipboard, ? , `r`n, UseErrorLevel		;替换中文问号
StringReplace, clipboard, clipboard, ? , `r`n, UseErrorLevel		;替换英文问号
StringReplace, clipboard, clipboard, < , `r`n, UseErrorLevel		;替换英文<
StringReplace, clipboard, clipboard, > , `r`n, UseErrorLevel		;替换英文>
StringReplace, clipboard, clipboard, 《 , `r`n, UseErrorLevel		;替换中文《
StringReplace, clipboard, clipboard, 》 , `r`n, UseErrorLevel		;替换英文》
StringReplace, clipboard, clipboard, @ , `r`n, UseErrorLevel		;替换@
StringReplace, clipboard, clipboard, # , `r`n, UseErrorLevel		;替换#
StringReplace, clipboard, clipboard, $ , `r`n, UseErrorLevel		;替换$
StringReplace, clipboard, clipboard, `% , `r`n, UseErrorLevel		;替换%
StringReplace, clipboard, clipboard, ^ , `r`n, UseErrorLevel		;替换^
StringReplace, clipboard, clipboard, & , `r`n, UseErrorLevel		;替换&
StringReplace, clipboard, clipboard, * , `r`n, UseErrorLevel		;替换*
StringReplace, clipboard, clipboard, `` , `r`n, UseErrorLevel		;替换`
StringReplace, clipboard, clipboard, `:: , `r`n, UseErrorLevel		;替换::
StringReplace, clipboard, clipboard, " , `r`n, UseErrorLevel		;替换"
StringReplace, clipboard, clipboard, { , `r`n, UseErrorLevel		;替换{
StringReplace, clipboard, clipboard, } , `r`n, UseErrorLevel		;替换}
StringReplace, clipboard, clipboard, | , `r`n, UseErrorLevel		;替换|
StringReplace, clipboard, clipboard, · , `r`n, UseErrorLevel		;替换中文···
StringReplace, clipboard, clipboard, ~ , `r`n, UseErrorLevel		;替换~
StringReplace, clipboard, clipboard, _ , `r`n, UseErrorLevel		;替换_
StringReplace, clipboard, clipboard, `t , `r`n, UseErrorLevel		;替换制表符
if ErrorLevel = 0 ; 不需要再进行替换.
break
}
Loop
{
StringReplace, clipboard, clipboard, `r`n`r`n, `r`n, UseErrorLevel		;替换两个换行为一个换行
StringReplace, clipboard, clipboard, `r`n%A_SPACE%, `r`n, UseErrorLevel	;替换行首空格为无
StringReplace, clipboard, clipboard, %A_SPACE%`r`n, `r`n, UseErrorLevel	;替换行尾空格为无
if ErrorLevel = 0 ; 不需要再进行替换.
break
}
}
sleep,200
send,^v
return

【C#脚本分享】翻译成汉语

using System;
using System.IO;
using System.Windows.Forms;
using LitJson;
using System.Net;
using System.Web;

public class Script
{
     

    static public void Main()
    {
		string t=HttpUtility.UrlEncode(Clipboard.GetText(),System.Text.Encoding.UTF8);
		string json3=GetWebClient("https://translate.plausibility.cloud/api/v1/auto/zh/"+t);
		JsonData txt2=JsonMapper.ToObject(json3);  //https://blog.csdn.net/DoyoFish/article/details/81976181
	//	MessageBox.Show(txt2["translation"].ToString());
		Clipboard.SetText(txt2["translation"].ToString());	
	}
	
		static public string GetWebClient(string url)
		{
        	ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
		    
		    string strHTML = "";
		    WebClient myWebClient = new WebClient();
		    Stream myStream = myWebClient.OpenRead(url);
		    StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("utf-8"));
		    strHTML = sr.ReadToEnd();
		    myStream.Close();
		    return strHTML;
		}
}

不懂C#,既然是脚本,能说说怎么调用吗

一直没搞懂,到底怎么将光标下的文件名或者文件夹传给claunch?

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

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

下载地址

dogbean.ysepan.com

下载悬浮按钮.exe,替换claunahk文件夹下原本的悬浮按钮.exe即可。

image

2 个赞

一个看起来很有用,其实没什么用的搜索或翻译选中文本菜单。(浏览器中打开)

代码
#SingleInstance Force
#NoTrayIcon
#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%

; !W::  ;<-- Alt + W 搜索或翻译选中文本。(若单独使用则打开)
    Send, ^c
    Sleep, 200
    Menu, ContextMenu, Add, 文本 -----> 搜索, Google
    Menu, ContextMenu, Disable, 文本 -----> 搜索
    Menu, ContextMenu, Add, Google
    Menu, ContextMenu, Icon, Google, ../ICO/搜索/google.ico
    Menu, ContextMenu, Add, DuckDuckGo
    Menu, ContextMenu, Icon, DuckDuckGo, ../ICO/搜索/DuckDuckGo.ico
    Menu, ContextMenu, Add, Yandex
    Menu, ContextMenu, Icon, Yandex, ../ICO/搜索/Yandex.ico
    Menu, ContextMenu, Add, Bing
    Menu, ContextMenu, Icon, Bing, ../ICO/搜索/Bing.ico
    Menu, ContextMenu, Add, 百度
    Menu, ContextMenu, Icon, 百度, ../ICO/搜索/百度.ico
    Menu, ContextMenu, Add, 知乎
    Menu, ContextMenu, Icon, 知乎, ../ICO/搜索/知乎.ico
    ; Menu, ContextMenu, Add, 打开所有搜索页面
    ; Menu, ContextMenu, Icon, 打开所有搜索页面, ../ICO/搜索/搜索.ico
    
    Menu, ContextMenu, Add
    ;--------------------------------
    Menu, ContextMenu, Add, 文本 -----> 翻译, Google
    Menu, ContextMenu, Disable, 文本 -----> 翻译
    Menu, ContextMenu, Add, 谷歌翻译
    Menu, ContextMenu, Icon, 谷歌翻译, ../ICO/搜索/google.ico
    Menu, ContextMenu, Add, 百度翻译
    Menu, ContextMenu, Icon, 百度翻译, ../ICO/搜索/百度.ico
    Menu, ContextMenu, Add, 搜狗翻译
    Menu, ContextMenu, Icon, 搜狗翻译, ../ICO/搜索/搜狗.ico
    ; Menu, ContextMenu, Add, 必应翻译
    ; Menu, ContextMenu, Icon, 必应翻译, ../ICO/搜索/Bing.ico
    ; Menu, ContextMenu, Add, 有道翻译
    ; Menu, ContextMenu, Icon, 有道翻译, ../ICO/搜索/有道.ico
    Menu, ContextMenu, Add, 打开所有翻译页面
    Menu, ContextMenu, Icon, 打开所有翻译页面, ../ICO/搜索/翻译.ico
    ;--------------------------------
    Menu, ContextMenu, Show
	Menu, ContextMenu, Delete
Return
;--------------------------------
Google:
    searchOrVisitFromClip("https://www.google.com/search?q=")
return

DuckDuckGo:
    searchOrVisitFromClip("https://duckduckgo.com/?q=")
return

Yandex:
    searchOrVisitFromClip("https://www.yandex.com/search/?text=")
return

Bing:
    searchOrVisitFromClip("https://www.bing.com/search?q=")
return

百度:
    searchOrVisitFromClip("https://www.baidu.com/s?wd=")
return

知乎:
    searchOrVisitFromClip("http://www.zhihu.com/search?q=")
return

; 打开所有搜索页面:
;     searchOrVisitFromClip("https://www.google.com/search?q=")
;     searchOrVisitFromClip("https://duckduckgo.com/?q=")
;     searchOrVisitFromClip("https://www.yandex.com/search/?text=")
;     searchOrVisitFromClip("https://www.bing.com/search?q=")
;     searchOrVisitFromClip("https://www.baidu.com/s?wd=")
;     searchOrVisitFromClip("http://www.zhihu.com/search?q=")
; return

    ;--------------------------------
谷歌翻译:
    searchOrVisitFromClip("https://translate.google.com/?q=")
return

搜狗翻译:
    searchOrVisitFromClip("https://fanyi.sogou.com/text?keyword=")
return

百度翻译:
    searchOrVisitFromClip("https://fanyi.baidu.com/#en/zh/")
return

; 有道翻译:
;     searchOrVisitFromClip("https://dict.youdao.com/result?word=")
;     ;searchOrVisitFromClip("https://fanyi.youdao.com/search?q=")
; return
;
; 必应翻译:
;     searchOrVisitFromClip("https://cn.bing.com/dict/search?q=")
; return

打开所有翻译页面:
    searchOrVisitFromClip("https://translate.google.com/?q=")
    searchOrVisitFromClip("https://fanyi.sogou.com/text?keyword=")
    searchOrVisitFromClip("https://fanyi.baidu.com/#en/zh/")
    ; searchOrVisitFromClip("https://dict.youdao.com/result?word=")
    ; searchOrVisitFromClip("https://cn.bing.com/dict/search?q=")

return
;--------------------------------
searchOrVisitFromClip(searchUrl){
    clip := clipboardAll
    clip := ""
    ClipWait, 0.9
    if(ErrorLevel){
    } else if (clipboard ~= "^https?:\/\/") {
        run, % clipboard
    } else {
        run, % searchUrl clipboard
    }
}

感谢提供的代码,另外没有标题栏之后,窗口移动要怎么操作呢,还真的不会 :sweat_smile:

搜索 “ahk窗口移动”,太多了。 :smiley:

太强了!真的很棒!