web-dev-qa-db-ja.com

Node.jsのクリップボードにコピーしますか?

Node.jsでクリップボードにコピーする方法はありますか?これまでに何かモジュールやアイデアはありますか?デスクトップアプリケーションでNode.jsを使用しています。うまくいけば、なぜこれを達成できるようにしたいのかが明らかになります。

59
Tower

クリップボードは、オペレーティングシステムに固有のものではありません。これは、オペレーティングシステムが実行されているウィンドウシステムの構成体です。したがって、たとえばXでこれを機能させるには、XlibやXCBへのバインディングが必要になります。ノードのXlibバインディングは実際に存在します: https://github.com/mixu/nwm 。 Xクリップボードにアクセスできるかどうかはわかりませんが、自分で作成することになるかもしれません。ウィンドウには個別のバインディングが必要です。

編集:何かハックしたい場合は、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);
});
16
chjj

OS Xの場合:

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

write()は、バッファまたは文字列を取ることができます。文字列のデフォルトのエンコーディングはutf-8です。

64
Benjamin Atkin

clipboardy を確認してください。クロスプラットフォームでコピー/貼り付けができます。別の答えのcopy-pasteモジュール 言及 よりも積極的に保守されており、そのモジュールの問題の多くを修正しています。

const clipboardy = require('clipboardy');

// Copy
clipboardy.writeSync('????');

// Paste
clipboardy.readSync();
//????
36
Sindre Sorhus

copyおよびpaste関数を提供するモジュールは次のとおりです。 https://github.com/xavi-/node-copy-paste

require("copy-paste").global()が実行されると、2つのグローバル関数が追加されます。

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

前述の他の多くの回答のように、ノードをコピーして貼り付けるには、外部プログラムを呼び出す必要があります。の場合 node-copy-pastepbcopy/pbpaste (OSXの場合)、 xclip (Linuxの場合)、および clip (Windowsの場合)。

このモジュールは、サイドプロジェクトでREPLで多くの作業を行っていたときに非常に役に立ちました。言うまでもなく、 copy-paste はコマンドラインユーティリティにすぎません。notはサーバー作業用です。

30
Xavi

Windowsでの最短の方法:

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

これを処理する別のアプリケーションを作成することで、なんとかしました。確かに最善の方法ではありませんが、機能します。

私は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
    }
);
2
pimvdb

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用の同じコードですが、pbcopyXclipapt get install xclip

1
FGRibreau