1

Я работаю над gnome-расширениями (javascript), и мне хотелось бы узнать, можно ли получить/захватить рабочий стол/экранный объект, чтобы применить к нему изменения.получить весь рабочий стол/экран с помощью расширения gnome?

Например, получить окно я использовать этот код:

let app= app_system.get_running(); 
for(i = 0; i < app.length; i++) { 
    let window = app[i].get_windows(); 

Существует что-то подобное, чтобы захватить рабочий стол?

таких как system.get_desktop().

+0

Проверьте этот: http://www.roojs.org/seed/gir-1.2-gtk-3.0/seed/Gdk.Screen.html#expand Выглядит аппаратное обеспечение !? Я посмотрю на него –

+1

Не используйте этот сайт: он полностью устарел. Это также относится к Seed, привязке самоанализа на JavaScriptCore для JS. Оболочка GNOME написана с использованием GJS, вместо этого привязана к MozJs, что означает, что есть некоторые отличия. Плюс, как я уже сказал, бот-семя и этот веб-сайт больше не поддерживаются и ужасно устарели. – ebassi

+0

Это устаревшее. Но некоторые варианты по-прежнему полезны. Во всяком случае, Gdk.Screen все еще находится в стабильном выпуске? И соответствует ли оно тому, что мне нужно? –

ответ

1

Вы не можете использовать API Clutter для этого; скриншот необходимо выполнить с помощью композитора в нужное время, а сохранение данных в файл должно выполняться асинхронно, чтобы избежать блокировки цикла композитора.

GNOME Shell предоставляет API DBus для снятия скриншотов и скринкастов, что полезно для внешних служб (например, gnome-screenshot использует этот API, если присутствует, вместо использования X11 API). Так как вы пишете расширение, вы можете использовать один и тот же внутренний API, чтобы сделать снимок, импортируя Shell модуль и использовать его Shell.Screenshot класс:

const Shell = imports.gi.Shell; 
const Lang = imports.lang; 

let shooter = new Shell.Screenshot(); 
shooter.screenshot (filename, includePointer, onScreenshotComplete); 

Где filename путь к файлу, который вы хотите сохранить; includePointer - это логическое значение, определяющее, следует ли указывать указатель на скриншот; и onScreenshotComplete - функция, вызываемая при сохранении снимка экрана.

+0

Хорошо, так нет способа сделать это вживую? Я имею в виду, я не могу использовать скриншот для применения шейдера на моем рабочем столе. –

+0

Теперь вы буквально задаете другую тему; вы должны быть более ясными в том, чего вы хотите достичь, когда задаете вопрос. Если вы хотите применить шейдер к окну, вам нужно пройти график сцены и найти нужного вам актера окна и использовать ShaderEffect. Если вы хотите применить ShaderEffect к области на экране, вам нужно применить шейдер к сцене и загрузить координаты области в шейдер в качестве униформы. – ebassi

+0

Спасибо, что ответили на вопрос, плюс мой вопрос в комментарии выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^