Node.jsでクリップボードにコピーする方法はありますか?モジュールやアイデアはありますか?デスクトップアプリケーションでNode.jsを使用しています。うまくいけば、それが私がこれを達成できるようにしたい理由が明らかになるでしょう。
回答:
クリップボードはオペレーティングシステムに固有のものではありません。これは、オペレーティングシステムがたまたま実行しているウィンドウシステムの構造です。したがって、たとえばこれを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);
});
OS Xの場合:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
バッファまたは文字列を取ることができます。文字列のデフォルトのエンコーディングはutf-8になります。
チェックアウトclipboardy
。クロスプラットフォームをコピーして貼り付けることができます。別の回答で言及されているcopy-paste
モジュールよりも積極的に維持されており、そのモジュールの問題の多くを修正しています。
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
cypress.Iでクリップボードの内容を取得する必要があり、そのボタンのクリックで、自分のWebアプリケーションのボタンを持っていますが、それは、任意の入力がはるかに高く評価されている未定義与えるstackoverflow.com/questions/61650737/...
これが提供copy
しpaste
機能するモジュールです: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/pbpaste
xclip
clip
このモジュールは、サイドプロジェクトのREPLで多くの作業を行っていたときに非常に役立ちました。言うまでもなく、これcopy-paste
はコマンドラインユーティリティにすぎません。サーバーでの作業を目的としたものではありません。
Windowsでの最短の方法:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
最初に要求する必要があります。
ReferenceError: util is not defined
最初含めずにconst util = require("util")
、私は両方のElectonメインでテストしていない運でプロセスをレンダリングします。それはノード12.14.1CLIから言われています。ユースケースに基づいてutilを安全側に定義する必要があると言っても差し支えないと思います。
これを処理する別のアプリケーションを作成することで、なんとかそうすることができました。それは確かに最善の方法ではありませんが、機能します。
私は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には、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
、Xclip(apt get install xclip
)に置き換えます。
echo fooo | clip
。では、ユーザーに何かをインストールするように求めずに、これをLinuxで使用するにはどうすればよいでしょうか。
echo fooo | clip
動作する可能性がありますが、結果には主文字列の最後に「\ n」が含まれます。これは、私の予想外です。
このゼロクリップボードを確認してください
npm installzeroclipboard