为Unified Remote添加任意自定义功能,把手机变成电脑的「真」万能遥控器(兼论如何实现一键盘是英文输入法,一键盘中文输入法)

背景介绍

Unified Remote这个软件想必有很多人在用,小众软件也介绍过两次了,不知道的小伙伴快去看看。

这个软件可以通过蓝牙或者同WiFi,把手机变成电脑的触摸板,键盘,ppt翻页等等,以及很多为其他程序定制的遥控

然而,这些定制的遥控,和我们国人需求完全不搭,比如Spotify、netflix等,让人不禁思考,要是能定制自己的遥控器就好了。

这篇文章就来介绍一下,无需编程基础,如何用最简单的方法,按照自己的需求,定制自己的遥控器。

同时,看到有坛友发问

这篇文章同时也介绍一个通过双键盘解决中英文输入法切换难题的方案,即在手机上虚拟一个键盘,作为单纯英文键盘,实体键盘则作为中文键盘,妈妈再也不用担心我的输入法切换了!

方法介绍

unfied remote是有一个自定义遥控器的功能的,但是需要写代码,代码规则未知。不过,我们可以修改它现有的遥控器的代码,化为己用。

我的想法是通过unfied remote的send text to clipboard功能,把想要进行的操作发送到电脑的剪贴板,再通过autohotkey的 OnClipboardChange功能监听剪贴板,根据剪贴板内容的不同,执行不同的功能。

具体方法

  • 第一步
    · 打开文件夹路径C:\ProgramData\Unified Remote\Remotes\Bundled\Unified\Main\Send Text
    复制路径下的所有文件。
    · 打开文件夹路径C:\ProgramData\Unified Remote\Remotes\Bundled\Unified\Examples
    新建文件夹命名为englishkeyboard(也就是英语键盘)。把上一步复制的东西都粘贴进新建的文件夹。

  • 第二步
    · 用记事本打开meta.prop,随便改一改
    Snipaste_2022-02-23_16-42-46
    ·用记事本打开remote.lua,和layout.xml
    删掉无用的部分,变成如下。

  • 第三步
    ·照猫画虎
    复制并且微改这两部分代码,实现把自定义的指令发送到电脑的剪贴板

    <row weight="1">
      <button text="To Clipboard" onTap="copy" />
    </row>
--@help Copy to clipboard
actions.copy = function()
	local code = utf8.replace(_text, "\"", "\\\"");
	print("Copying " .. code .. " into clipboard");
	if OS_WINDOWS then
		script.shell("echo \"" .. code .. "\" | clip");
	elseif OS_OSX then
		script.apple("set the clipboard to \"" .. code .."\"");
	elseif OS_LINUX then
		-- Might not work on every distribution..
		script.shell("echo \"" .. code .. "\" | xclip -selection c")
	else 
		print("WTF!?");
	end
end

例如,想要把“autodogkey_doga”发送到电脑剪贴板。
分别修改代码如下:

    <row weight="1">
      <button text="我是一只快乐的狗A" onTap="doga" />
    </row>
--@help Copy to clipboard
actions.doga = function()
	local _text = "autodogkey_doga";
	local code = utf8.replace(_text, "\"", "\\\"");
	print("Copying " .. code .. " into clipboard");
	if OS_WINDOWS then
		script.shell("echo \"" .. code .. "\" | clip");
	elseif OS_OSX then
		script.apple("set the clipboard to \"" .. code .."\"");
	elseif OS_LINUX then
		-- Might not work on every distribution..
		script.shell("echo \"" .. code .. "\" | xclip -selection c")
	else 
		print("WTF!?");
	end
end

-第四步,重启两端软件测试一下
手机端会提示新建了englishkeyboard。
因为meta.prop文件中meta.tags.category: input。也就是分类是input分类。
在input分类下找到englishkeyboard添加,我做了两个按钮。

快

测试结果很ok,不过不知道为什么左右会多两个引号,不过完全没关系

  • 第五步,电脑端运行autohotkey代码
#Persistent
return

OnClipboardChange:
{
Clipboardtemp := Clipboard
num := StrLen(Clipboardtemp)
if ((SubStr(Clipboardtemp,2,10) ="autodogkey") and (num < 30))
{
Clipboardtemp := SubStr(Clipboard,13,num-16)
Switch Clipboardtemp
{
case "doga":
    sendinput,{text}a
		Return
case "dogb":
    sendinput,{text}b
		Return
case "任意语句":
    ;任意ahk代码
		Return
Default:
}
}
else
{

}
return
}

最终效果展示

快

可以看到,我用实体键盘打的字,是中文输入法,而用手机虚拟键盘打的字,是英文,互不干扰!并且,打字速度丝毫没有迟钝!

后续可以参照其内置的english keyboard的界面,完善和美化这一英文键盘

优点讨论

**通过这一方法,可以非常轻松地批量化制造属于自己的手机万能键盘了!**只需要改动传递的粘贴板数值(注意,最好是纯字母)和添加对应的autohotkey代码的case!

更更厉害的是,这一过程完全不需要手机的参与!完全在电脑上完成,你可以在你的所有安卓苹果甚至windows手机上安装这一app,会自动添加你的私人遥控器!

更更更棒的是,这些键盘是可以非常方便地进行代码共享的!只需要把两边的代码分别添加到对应文件夹和ahk的case列表中就哦了!

更更更更棒的是,linux和macos也是可以用同样办法的!

示例中的英文遥控器分享

两个键的demo版本链接:https://pan.baidu.com/s/1m4JwGLL-1AsxkOKlfum5_g
提取码:roum

完整版英文键盘的百度网盘链接
链接:百度网盘 请输入提取码
提取码:acyp

解压后,将englishkeyboard文件夹复制到C:\ProgramData\Unified Remote\Remotes\Bundled\Unified\Examples
运行audog.ahk,打开手机,开始体验吧!

之后做好了完整版英文输入遥控器我会再次分享的!
另外如果大家有做好的遥控器也可以分享到这个帖子下面啊!

如果……其实……

Node.js 起一个服务器,然后手机端显示一个网页,网页按钮产生请求,服务器接到请求运行对应的 ahk,就很简单,性能需求很低,兼容性很高,甚至没几行代码。

稳定性怎么样呢?连按100次按钮,电脑端跟得上变化吗?
您给写一个我试试啊。
难度怎么样。我一个没写过代码的会吗?

延迟肯定存在,稳定性可以加函数过滤,也可以缓存操作。连按 100 次看什么频率了。

确实一直想弄,但是比较懒……(手头没有旧手机,就一个 iPad,不好摆出来啊

你看你都写 AHK 了是吧,那就没啥问题了,真没几行代码,当然手机上展示的界面和用来执行的 AHK 另说,但核心很简单


没有否认你方法的意思,只是提供一个另外的思路。

对了,差点忘了说了,有个好玩的点。

你可以同时用n个手机同时打开不同的自定义遥控器,在桌子上摆一溜。
一个手机作为英文键盘,一个手机作为触摸板,一个手机作为常用快捷键列表……

再加一个优点,可以和tasker连用,作为tasker的插件

做了个完整版的,全字母,带退格 空格 和回车

如图,中文输入法状态下,手机虚拟键盘输入的是英文,并且无延迟和缺失。

快

完整版百度网盘链接
链接:百度网盘 请输入提取码
提取码:acyp

解压后,将englishkeyboard文件夹复制到C:\ProgramData\Unified Remote\Remotes\Bundled\Unified\Examples
运行audog.ahk,打开手机,开始体验吧!