代码拉取完成,页面将自动刷新
根据文件路径将本地文件写入到剪贴板的dll(c++)工程
适用于64位的Windows 7和Windows 10
c++ dll工程
【CopyFileToClipboard.js】的全代码如下:
// 不能用import,会报错,必须放在最外层引入
const { app } = require('electron');
try{
const ffi = require('ffi-napi');
var path = require('path');
// 重启系统im自动启动时路径有变,需要重置绝对路径,否则报Win32 error 126错误(此处貌似不需要)
// var oldPath = process.env.PATH;
// var dllPath = 'C:\\Windows\\SysWOW64\\';
// process.env['PATH'] = `${process.env.PATH};${dllPath}`;
const kernel32_ffi = ffi.Library('kernel32', {
SetDllDirectoryA: ['bool', ['string']]
});
// process.env['PATH'] = oldPath;
// 重启系统im自动启动时路径有变,需要指定绝对路径,否则报Win32 error 126错误
var resourcesPath = getResourcesPath();
kernel32_ffi.SetDllDirectoryA(resourcesPath); // 必须指定绝对路径
// c++的dll中不能带namespace和class,否则找不到function
const CopyFileToClipboard = ffi.Library('CopyFileToClipboard.dll', {
'RunCopyFile': // 声明这个dll中的一个函数
[
'int', ['string'], // 前为出力参数,后为入力参数
],
});
const RunCopyFile = function(fullPath){
console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++文件copy开始: " + fullPath);
var result = CopyFileToClipboard.RunCopyFile(fullPath);
console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++文件copy结束: " + result);
};
module.exports = {CopyFileToClipboard, RunCopyFile};
}catch(e){
// 如果background.js中一开始就引入此js,taskbar中点击翼丰信,background.js中second-instance激活主窗体后会报dll错,已在使用时引入,以防万一,在此catch住
console.log("=======error: ffi-napi 引入 CopyFileToClipboard.dll 出错!!!")
console.error(e);
}
// 此方法必须放在外层,而且不能写成const getResourcesPath = function(){}的形式,否则报错
function getResourcesPath(){
if (process.env.WEBPACK_DEV_SERVER_URL){
const devUrl = 'resources/dll/';
return devUrl;
}else{
var appPath = path.dirname(app.getPath('exe'));
const eveUrl = appPath + '\\resources\\dll\\';
console.log("************CopyFileToClipboard prod dllPath: " + eveUrl);
return eveUrl;
}
}
// 引入:
const { RunCopyFile } = require("./CopyFileToClipboard");
// 使用:
// 执行本地文件copy操作
ipcMain.on('CopyFileToClipboard', (event, args) => {
console.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++执行文件copy: " + args.fullPath);
// 之前以下两种情况报错是因为重启电脑im自动启动导致环境变量指定的路径有变,已解决:
// 1、电脑重启后立即启动app,会报ffi-napi找不到dll的win32 error 126错误,导致dll加载失败
// 2、taskbar任务栏右键点选翼丰信后,在触发second-instance前也会报上面的错
// require("./CopyFileToClipboard").RunCopyFile(args.fullPath);
RunCopyFile(args.fullPath);
});
// 发送事件:
ipcRenderer.send('CopyFileToClipboard', {fullPath: message.messageContent.localPath});
// 执行粘贴:
// 这样,在ctrl+v调起的handlePaste(e)方法中就可以从剪贴板中获取到文件了
var clipboardFiles = e.clipboardData.files;
以上,也请多注意代码中的注释,都是个人爬坑时留下的痕迹 TT
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。