实现Windows和iPhone互发文本
2022-06-13 20:30:28通过Windows以通知形式发送到iPhone文本,iPhone发送到Windows自动复制来实现类似共享剪贴板
事由
由于不可抗力,iPhone始终无法和Windows实现共享剪贴板,导致了传输文本成了一件麻烦事,只好自己去实现一个还算方便的形式。
实现方式
Windows发送到iPhone
iPhone下载Bark即可实现自由自定义通知。
只需要根据要求发送get请求就可以实现推送到通知到iPhone。
在Chrome浏览器可以直接去商店找到bark插件,配置好路径就能点击就发送到手机。
Bark - Chrome 网上应用店 (google.com)
或者通过Quicker动作发送复制内容。
发送到iPhone - 动作信息 - Quicker (getquicker.net)
我也尝试实现了图形化,采用易语言写了图形界面,但是由于编码有问题,就放弃了。转向用C++实现了一个程序,添加Path环境变量,即可实现Shell命令,或者配合上Power Toys的Power Toys Run即可实现编辑内容后发布。
不过在Power Toys Run有BUG,附带中文就不能正确引导,更多的是放在Shell环境下可以使用。
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
string content = argv[1];
content.erase(0, 1);
string url = "替换成自己的URL" + content;
string curl = "curl "+ url;
system(curl.c_str());
return 0;
}
依赖:
- Curl
为了实现简单的get请求,而不是再去写复杂的GET实现,直接调用Shell环境,用Curl发送GET请求,导致必须依赖Curl,以及运行时必然会闪过Shell页面。
技术不达标,未能实现复制自动发送。
由于iOS14.5之后不能自动复制通知,也比较遗憾在iPhone端也不能自动复制。
iPhone发送到Windows
用node实现一个简单的http服务器,配合Apple 快捷指令,发送PUT请求,即可将内容发送到Windows并实现自动复制。
快捷指令
记得将快捷指令内的URL改成自己服务器的。
服务器
添加依赖
npm install http iconv-lite child_process silly-datetime
服务器代码:
#!node
const { exec } = require('child_process')
const sd = require('silly-datetime')
const iconv = require('iconv-lite')
const http = require("http")
const fs = require('fs')
var runMath = 1
const server = http.createServer()
const time = sd.format(new Date(), 'YYYY-MM-DD HH:mm')
const logTime = sd.format(new Date(), 'YYYY-MM-DD HH.mm')
const log = `服务器启动时间:${time}\n`
console.log(log)
var fileNmame = logTime+".log"
var filePath = __dirname + "/log/"+fileNmame
fs.mkdir(__dirname + "/log",function(err){})
fs.writeFileSync(filePath, log, { flag: 'a+' })
server.on("request", (req, res) => {
const chunk = []
req.on("data", (data) => {
chunk.push(data)
})
req.on("end", () => {
const time = sd.format(new Date(), 'YYYY-MM-DD HH:mm')
const header=time+" 第" + runMath + "次请求\n----------------------------------------------------------------------------\n"
console.log(header)
fs.writeFileSync(filePath, header, { flag: 'a+' })
runMath++
const data = Buffer.concat(chunk)
console.log(data.toString())
fs.writeFileSync(filePath, data.toString(), { flag: 'a+' })
const footer="\n----------------------------------------------------------------------------\n"
console.log(footer)
fs.writeFileSync(filePath, footer, { flag: 'a+' })
exec('clip').stdin.end(iconv.encode(data.toString(), 'gbk'))
})
res.end('收到了')
})
server.listen(18011, () => {
console.log("server is http://127.0.0.1:18011")
fs.writeFileSync(filePath, "server is http://127.0.0.1:18011\n", { flag: 'a+' })
})
启动服务器,会在同目录下创建log文件夹,内生成了每次运行的日志文件。
实现开机启动
创建一个用来运行服务器的bat脚本
node 服务器文件位置
在创建一个vbs脚本
Set shell = Wscript.createobject("wscript.shell")
a = shell.run ("脚本位置.bat",0)
然后给vbs创建快捷方式,放在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
目录下实现开机运行。
如果想停止运行在任务管理器找到node结束掉就行了。