更改获取资源管理器路径、选中文本、选中文件的方法

This commit is contained in:
fofolee 2020-04-09 00:33:47 +08:00
parent 63e0766389
commit 7403c55d4d
4 changed files with 70 additions and 29 deletions

View File

@ -1,4 +1,4 @@
# 快捷命令 V1.1.0 # 快捷命令 V1.1.1
## 简介 ## 简介
@ -11,6 +11,7 @@
- 新增`发送系统通知`的输出模式 By [imxiny](https://github.com/imxiny) - 新增`发送系统通知`的输出模式 By [imxiny](https://github.com/imxiny)
- 修复 php 无法输入 <? 问题修复MacOS环境变量问题修复脚本不能带参数问题 By [dofy](https://github.com/dofy) - 修复 php 无法输入 <? 问题修复MacOS环境变量问题修复脚本不能带参数问题 By [dofy](https://github.com/dofy)
- 使用官方API来获取浏览器的URL - 使用官方API来获取浏览器的URL
- 更改获取资源管理器路径、选中文本、选中文件的方法,获取管理器路径弃用模拟按键的方式,解决污染用户剪贴板问题
- 之前当输出模式为纯文本或HTML时输出时会先隐藏窗口再弹出窗口给人一种窗口闪动的错觉影响用户体验现在不会再闪动了同时碍于一些原因添加了一个限制即当输出模式为纯文本或HTML时无法使用`pwd``SelectText``SelectFile`三个特殊变量 - 之前当输出模式为纯文本或HTML时输出时会先隐藏窗口再弹出窗口给人一种窗口闪动的错觉影响用户体验现在不会再闪动了同时碍于一些原因添加了一个限制即当输出模式为纯文本或HTML时无法使用`pwd``SelectText``SelectFile`三个特殊变量
- 修复中文乱码问题(貌似) - 修复中文乱码问题(貌似)
@ -112,27 +113,14 @@ PS关于环境变量问题有些脚本执行错误问题由于一直未
`切换百度/谷歌搜索` 在百度或者谷歌的搜索页面切换至另一个搜索引擎进行搜索 (python/双平台) `切换百度/谷歌搜索` 在百度或者谷歌的搜索页面切换至另一个搜索引擎进行搜索 (python/双平台)
## 下载 ## 安装方法
[百度网盘](https://pan.baidu.com/s/1kEEQcQ1p3Rjli2sTtmCcTg) 提取码: `rbek` 插件中心进行安装
[项目地址](https://github.com/fofolee/uTools-QuickerCommand) [项目地址](https://github.com/fofolee/uTools-QuickerCommand)
[插件发布页](https://yuanliao.info/d/424) [插件发布页](https://yuanliao.info/d/424)
## 安装方法
`upx`文件拖入`uTools`输入框中安装即可
## 关键字 ## 关键字
`快捷命令` `QuickCommand` `快捷命令` `QuickCommand`
## 鸣谢
鸣谢`uTools`团队,插件中使用的`robotJS`使用的是`剪贴板`插件中的`robotJS`,省去了自行编译的麻烦,在此感谢!
## 另:两个小需求
希望插件的`Features`能够支持以`base64`作为图标,好实现多设备的图标同步,目前的实现方案有点麻烦~
另外可以根据使用的操作系统动态启用或禁用某些`Feature`,即给`Feature`添加类似`platform`的功能

View File

@ -75,7 +75,7 @@ function runCmd(cmd, option, codec, output) {
break; break;
case "notice": case "notice":
// 发送系统通知 // 发送系统通知
utools.showNotification(stdout, null, true);q1c utools.showNotification(stdout, null, true);
break; break;
case "ignore": case "ignore":
default: default:

BIN
bin/GetForegroundWindow.exe Normal file

Binary file not shown.

View File

@ -4,9 +4,8 @@ const { spawn, exec } = require("child_process")
const iconv = require('iconv-lite') const iconv = require('iconv-lite')
const { clipboard } = require('electron') const { clipboard } = require('electron')
const robot = utools.robot const robot = utools.robot
const jschardet = require("jschardet") // const jschardet = require("jschardet")
//-------checkUpdate------
const path = require("path") const path = require("path")
const { dialog, BrowserWindow, nativeImage } = require('electron').remote const { dialog, BrowserWindow, nativeImage } = require('electron').remote
const { shell } = require('electron'); const { shell } = require('electron');
@ -80,12 +79,55 @@ paste = () => {
robot.keyTap('v', ctlKey); robot.keyTap('v', ctlKey);
} }
// 保存剪贴板
storeClip = () => {
var formats = clipboard.availableFormats("clipboard");
if (formats.includes("text/plain")) {
return ['text', clipboard.readText()]
}
if (formats.includes("image/png") || formats.includes("image/jpeg")) {
return ['image', clipboard.readImage()]
}
var file;
if (isWin) {
file = clipboard.readBuffer('FileNameW').toString('ucs2').replace(/\\/g, '/');
file = file.replace(new RegExp(String.fromCharCode(0), 'g'), '');
} else {
file = clipboard.read('public.file-url').replace('file://', '');
}
if (file) {
return ['file', file]
}
return []
}
// 恢复剪贴板
restoreClip = historyData => {
if (historyData[0] == 'text') {
clipboard.writeText(historyData[1]);
return
}
if (historyData[0] == 'image') {
clipboard.writeImage(historyData[1]);
return
}
if (historyData[0] == 'file') {
utools.copyFile(historyData[1])
return
}
clipboard.writeText('')
}
getSelectText = () => { getSelectText = () => {
var historyData = storeClip()
copy(); copy();
return clipboard.readText() var selectText = clipboard.readText()
restoreClip(historyData)
return selectText
} }
getSelectFile = () => { getSelectFile = () => {
var historyData = storeClip()
copy(); copy();
var filePath; var filePath;
if (isWin) { if (isWin) {
@ -94,21 +136,32 @@ getSelectFile = () => {
} else { } else {
filePath = clipboard.read('public.file-url').replace('file://', ''); filePath = clipboard.read('public.file-url').replace('file://', '');
} }
restoreClip(historyData)
return filePath; return filePath;
} }
getAddr = () => { // 获取前台窗口句柄
robot.keyTap('d', 'alt'); GetForegroundWindow = callback =>
robot.setKeyboardDelay(10); exec(`"${path.join(__dirname, 'bin', 'GetForegroundWindow.exe')}"`, (error, stdout, stderr) => {
return getSelectText().replace(/\\/g, '/'); callback(stdout);
} });
pwd = () => pwd = () =>
new Promise((reslove, reject) => { new Promise((reslove, reject) => {
if (isWin) { if (isWin) {
var addr = getAddr(); GetForegroundWindow(hwnd => {
if (!exists(addr)) addr = `${os.homedir().replace(/\\/g, '/')}/Desktop`; var cmd = `powershell.exe -NoProfile "((New-Object -COM 'Shell.Application').Windows() | Where-Object { $_.HWND -eq (${hwnd}) } | Select-Object -Expand LocationURL).replace('file:///','')"`;
reslove(addr); exec(cmd, { encoding: "buffer" }, (err, stdout, stderr) => {
if (err) {
console.log(stderr);
reslove(`${os.homedir().replace(/\\/g, '/')}/Desktop`)
} else {
reslove(decodeURIComponent(iconv.decode(stdout, 'GBK').trim()));
}
});
})
} else { } else {
var cmd = `osascript -l JavaScript -e ' var cmd = `osascript -l JavaScript -e '
const frontmost_app_name = Application("System Events").applicationProcesses.where({ frontmost: true }).name()[0] const frontmost_app_name = Application("System Events").applicationProcesses.where({ frontmost: true }).name()[0]