在Node.js中复制到剪贴板?

时间:2011-10-15 14:50:52

标签: javascript node.js clipboard

有没有办法可以在Node.js中复制到剪贴板?任何模块或想法是什么?我在桌面应用程序上使用Node.js.希望能够清除为什么我希望它能够实现这一目标。

8 个答案:

答案 0 :(得分:59)

对于OS X:

function pbcopy(data) {
    var proc = require('child_process').spawn('pbcopy'); 
    proc.stdin.write(data); proc.stdin.end();
}

write()可以使用缓冲区或字符串。字符串的默认编码为utf-8。

答案 1 :(得分:34)

结帐clipboardy。它允许您复制/粘贴跨平台。在另一个答案中,它比copy-paste模块mentioned更积极地维护,它修复了该模块的许多问题。

const clipboardy = require('clipboardy');

// Copy
clipboardy.writeSync('');

// Paste
clipboardy.readSync();
//

答案 2 :(得分:29)

以下是提供copypaste功能的模块:https://github.com/xavi-/node-copy-paste

执行require("copy-paste").global()时,会添加两个全局函数:

> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'

与上面提到的许多其他答案一样,要复制并粘贴节点,您需要调用外部程序。在node-copy-paste的情况下,它调用pbcopy/pbpaste(对于OSX),xclip(对于linux)和clip(对于Windows)。

当我在REPL中为一个辅助项目做了大量工作时,这个模块非常有用。毋庸置疑,copy-paste只是一个命令行实用程序 - 意味着服务器工作。

答案 3 :(得分:16)

剪贴板不是操作系统固有的。它是操作系统正在运行的任何窗口系统的构造。因此,如果您希望这在X上工作,则需要绑定到Xlib和/或XCB。节点的Xlib绑定实际存在:https://github.com/mixu/nwm。虽然我不确定它是否允许您访问X剪贴板,但您最终可能会编写自己的剪贴板。你需要单独的窗口绑定。

编辑:如果你想做一些hacky,你也可以使用xclip:

var exec = require('child_process').exec;

var getClipboard = function(func) {
  exec('/usr/bin/xclip -o -selection clipboard', function(err, stdout, stderr) {
    if (err || stderr) return func(err || new Error(stderr));
    func(null, stdout);
  });
};

getClipboard(function(err, text) {
  if (err) throw err;
  console.log(text);
});

答案 4 :(得分:7)

Windows中最短的方式:

require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));

答案 5 :(得分:2)

我设法通过创建一个处理此问题的不同应用程序来实现。这肯定不是最好的方式,但它确实有效。

我在Windows上创建了一个VB.NET应用程序:

Module Module1

    Sub Main()
        Dim text = My.Application.CommandLineArgs(0)
        My.Computer.Clipboard.SetText(text)
        Console.Write(text) ' will appear on stdout
    End Sub
End Module

然后在Node.js中,我使用child_process.exec运行VB.NET应用程序,将要复制的数据作为命令行参数传递:

require('child_process').exec(
    "CopyToClipboard.exe \"test foo bar\"",

    function(err, stdout, stderr) {
        console.log(stdout); // to confirm the application has been run
    }
);

答案 6 :(得分:1)

Mac为此用例提供了一个本机命令行pbcopy

require('child_process').exec(
    'echo "test foo bar" | pbcopy',

    function(err, stdout, stderr) {
        console.log(stdout); // to confirm the application has been run
    }
);

Linux的相同代码,但将pbcopy替换为Xclipapt get install xclip

答案 7 :(得分:-4)

检查此zeroclipboard

  

npm install zeroclipboard