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


93

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

回答:


19

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

編集:何かハッキーなことをしたい場合は、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);
});

copy()と同等のクロムを持っていることは素晴らしいでしょう。

96

OS Xの場合:

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

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


これは、REPLでの迅速なデータ変換に非常に役立ちます。
ウィリアム

80

チェックアウトclipboardy。クロスプラットフォームをコピーして貼り付けることができます。別の回答で言及されているcopy-pasteモジュールよりも積極的に維持れており、そのモジュールの問題の多くを修正しています。

const clipboardy = require('clipboardy');

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

// Paste
clipboardy.readSync();
//🦄

2バイト文字もサポートしているため、「コピーアンドペースト」モジュールよりも優れています。しかし、これにはWindows32ビットOSに問題があります。
ポンムディVN 2017

1
@PonmudiVN Windows 32ビットのサポートが修正されました:github.com/sindresorhus/clipboardy/commit/...
Sindre Sorhus

私はインストールNPMやったçlipboardycypress.Iでクリップボードの内容を取得する必要があり、そのボタンのクリックで、自分のWebアプリケーションのボタンを持っていますが、それは、任意の入力がはるかに高く評価されている未定義与えるstackoverflow.com/questions/61650737/...
soccerway

31

これが提供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'

上記の他の多くの回答と同様に、ノードにコピーして貼り付けるには、外部プログラムを呼び出す必要があります。の場合、(OSXの場合)、(Linuxの場合)、および(Windowsの場合)をnode-copy-paste呼び出します。pbcopy/pbpastexclipclip

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


2
これが最良の答えです。クロスプラットフォームであり、本来の方法で動作します。
gilly3 2015

1
それはSO政策のために、独自のコードです追加したい場合があります
towc

18

Windowsでの最短の方法:

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

1
動作します!ありがとう...しかし、util最初に要求する必要があります。
LIXer 2017年

2
ありがとう!「util」依存関係の必要はありません。require( 'child_process')。spawn( 'clip')。stdin.end( "content_for_the_clipboard");
darmis 2017

私が得たReferenceError: util is not defined最初含めずにconst util = require("util")、私は両方のElectonメインでテストしていない運でプロセスをレンダリングします。それはノード12.14.1CLIから言われています。ユースケースに基づいてutilを安全側に定義する必要があると言っても差し支えないと思います。
ベナルジー

これはほぼ機能します。文字列を一重引用符で囲んでコピーします。誰かがこの動作を防ぐ方法を知っていますか?
m4cbeth

3

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

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

コマンドライン内で直接これを実行できると思いますか?このためのアプリを作成するということは、Mac、Linux、およびWindows用にアプリをコンパイルする必要があることを意味します。
タワー

@rFactor:Mac / Linuxの経験はまったくありません。恐れていますが、組み込みのクリップボードコマンドを認識していません。
pimvdb 2011年

コマンド 'echo "test foo bar" |を使用します。クリップ」、それは動作します。しかし、結果には改行があります\ n、それは私の仕事を壊します...
LIXer 2016

3

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)に置き換えます。


面白い!これを行うWindowsの方法もあると思いますか?また、ユーザーにxclipのインストールを依頼したくないので、プログラムにxclipをバンドルするのはどうでしょうか。
タワー

1
Windowsに何かがあることがわかりました:echo fooo | clip。では、ユーザーに何かをインストールするように求めずに、これをLinuxで使用するにはどうすればよいでしょうか。
タワー

echo fooo | clip動作する可能性がありますが、結果には主文字列の最後に「\ n」が含まれます。これは、私の予想外です。
LIXer 2017年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.