Могу ли я использовать функцию Clipboard.SetContent в приложении CLI? - PullRequest
0 голосов
/ 04 августа 2020

Функция выполняется без ошибок и возвращает Ok(()), но текст не помещается в буфер обмена:

pub fn copy_text(text_fragment: winrt::HString) -> winrt::Result<()> {
    let data_package = DataPackage::new()?;
    data_package.set_text(text_fragment)?;
    Clipboard::set_content(data_package)
}

В документации по API среды выполнения Windows есть следующий оператор для Clipboard.SetContent(DataPackage) функция:

Используйте этот метод после создания и определения DataPackage с данными, которые вы хотите поместить в буфер обмена. Вызывайте этот метод только тогда, когда приложение находится на переднем плане или когда к нему подключен отладчик.

Есть ли способ использовать эту функцию без пользовательского интерфейса?

1 Ответ

0 голосов
/ 05 августа 2020

Я не знаю, поддерживается ли он официально в потоке без пользовательского интерфейса, но, похоже, он работает, если вы добавите вызов flush следующим образом:

use windows::application_model::data_transfer::*;

fn main() -> winrt::Result<()> {
    let content = DataPackage::new()?;
    content.set_text("hello world from Rust")?;
    Clipboard::set_content(content)?;
    Clipboard::flush()?;

    Ok(())
}

Метод flush гарантирует, что содержимое будет скопировано в буфер обмена и останется там, даже если отправляющее приложение / процесс завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...