Подтвердить что ты не робот

Скопировать в буфер обмена в Node.js?

Есть ли способ скопировать в буфер обмена в Node.js? Любые модули или идеи, что так когда-либо? Я использую Node.js в настольном приложении. Надеюсь, это прояснит, почему я хочу, чтобы это удалось достичь.

4b9b3361

Ответ 1

Буфер обмена не является неотъемлемой частью операционной системы. Это конструкция любой оконной системы, с которой работает операционная система. Поэтому, если вы хотите, чтобы это работало на X, вам понадобятся привязки к Xlib и/или XCB. Xlib привязки для node фактически существуют: https://github.com/mixu/nwm. Хотя я не уверен, дает ли он вам доступ к буферу X, вы можете написать свое собственное. Для окон вам понадобятся отдельные привязки.

edit: Если вы хотите сделать что-то взломанное, вы также можете использовать 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);
});

Ответ 2

Для OS X:

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

write() может принимать буфер или строку. Кодировка по умолчанию для строки будет utf-8.

Ответ 3

Здесь модуль, предоставляющий функции 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'

Как и многие другие упомянутые ответы, для копирования и вставки в node вам нужно обратиться к внешней программе. В случае node-copy-paste он вызывает pbcopy/pbpaste (для OSX), xclip (для linux) и clip (для окон).

Этот модуль был очень полезен, когда я много работал в REPL для стороннего проекта. Излишне говорить, что copy-paste - это только утилита командной строки - она ​​не предназначена для работы сервера.

Ответ 4

Самый короткий путь в Windows:

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

Ответ 5

Отъезд clipboardy. Он позволяет вам копировать/вставлять кросс-платформу. Он более активно поддерживается, чем модуль copy-paste упомянутый в другом ответе, и он исправляет многие проблемы этого модуля.

const clipboardy = require('clipboardy');

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

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

Ответ 6

Мне это удалось, создав другое приложение, которое обрабатывает это. Это, конечно, не самый лучший способ, но он работает.

Я нахожусь в 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
    }
);

Ответ 7

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)

Ответ 8

проверьте zeroclipboard

npm установить zeroclipboard