Взаимодействие Linux приложения с окном другого приложения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Взаимодействие Linux приложения с окном другого приложения

Сообщение tema » 09.08.2017 20:44:35

Собссно вопрос в сабже...
Хочу сделать простой фронтенд для rdesktop.
Запустить не проблема с TProcess, но у него очень нефункциональное окно. Хочу сделать своё окно и чтобы в нём было окошко rdesktop
Последний раз редактировалось tema 10.08.2017 00:04:19, всего редактировалось 3 раз(а).
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: Встраивание окна другого приложение в своё приложение Li

Сообщение olegy123 » 09.08.2017 23:05:18

Можно все, тем более есть исходники.
https://github.com/rdesktop/rdesktop

Можно сделать librdesktop.so или librdesktop.a
вывести ключевые функции и воздействовать на них из lazarus-а.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Встраивание окна другого приложение в своё приложение Li

Сообщение tema » 09.08.2017 23:11:06

Так смысл в том, чтобы не выводить ничего. Он и так прекрасно работает. Смысл в том, чтобы запустить этот rdesktop (потом ещё хочу какой-нибудь vnc клиент) и просто тупо управлять запущеным окном. Перетаскивать, разворачивать на весь экран и т.п., используя нарисованную мною панельку.
Но даже если выводить. Как отрисовать это окно на моей форме?
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: Встраивание окна другого приложение в своё приложение Li

Сообщение olegy123 » 09.08.2017 23:17:36

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

есть
http://savannah.nongnu.org/projects/grdesktop
но при первом просмотре вроде он работает через TProcess

Добавлено спустя 16 минут 53 секунды:
Re: Встраивание окна другого приложение в своё приложение Linux
Нашел еще FreeRDP
https://github.com/FreeRDP/FreeRDP
хорошее описание API
http://pub.freerdp.com/api/index.html
даже показан клиент:
https://github.com/FreeRDP/FreeRDP/blob ... /freerdp.c
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Встраивание окна другого приложение в своё приложение Li

Сообщение tema » 09.08.2017 23:57:06

olegy123 писал(а):ненадо ничего выводить..
надо ликовать либлу, и ловить callback с обновлением картинки, ими перерисовывать свои панельки. одновременно отправлять мышь,клавиатуру..
но для этого нужно знать волшебные функции за это отвечающие.

Вово. А где их взять. Но мне не обязательно на своей панельке. Достаточно чтобы я мог просто передавать в это окошко какие-то свои приколы. Например таскать это окошко или размещать на экране имеено там где я укажу своей программой. Это нужно когда открыто два небольших окошка и чтобы их обоих таскать "склееными". Допустим панелька маленькая и я с неё управляю открытием/закрытием этих окошек; могу эту панельку таскать и окошки вслед за ней и т.п. По сути задачи отрисовывать у себя не стоит.
olegy123 писал(а):есть
http://savannah.nongnu.org/projects/grdesktop
но при первом просмотре вроде он работает через TProcess

Там волшебных функций нет. Я проштудировал этот код. Там именно как TProcess

olegy123 писал(а):Нашел еще FreeRDP
https://github.com/FreeRDP/FreeRDP
хорошее описание API
http://pub.freerdp.com/api/index.html
даже показан клиент:
https://github.com/FreeRDP/FreeRDP/blob ... /freerdp.c

Эта фигня глючит. https://forum.altlinux.org/index.php?to ... #msg313635
Из всего что я опробовал хорошо работает только rdesktop. grdesktop совершенно вырвиглазный фронтенд

Добавлено спустя 3 минуты 27 секунд:
Re: Взаимодействие своего приложения с окном другого приложения
Переформулировал задачу сабжа.

Добавлено спустя 2 минуты 10 секунд:
Re: Взаимодействие своего приложения с окном другого приложения
По сути выходит, что задача сводится к тому, чтобы отрисовать рамку вокруг окна rdesktop и "приклеить" это окно к перетаскиванию этой рамки, при этом скрыв заголовок окна rdesktop
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: Взаимодействие Linux приложения с окном другого приложен

Сообщение olegy123 » 10.08.2017 08:02:06

Понятно, вы не занимались си линкованием в lazarus-е.
tema писал(а):Там волшебных функций нет. Я проштудировал этот код. Там именно как TProcess

есть, задача сводится к тому чтобы преобразовать rdesktop не в программу, а в библиотеку с описанием .h - файла, далее функции переносятся в .pas файл и описывается линковка. Вся работа.
в итоге вы имеете librdesktop.so и линкующий его librdesktop.pas. с набором функций rdesktop.
Например я так работал с ffmpeg, чтобы не переводить все h файлы и не разбираться что там за структура в сотни строк, которая еще имеет десятки таких же структур, а они разбрасали описание на сотни h файлов. Вот чтобы не делать подвиг, не переводить все.. сделал просто создал свою обертку libMyFFmpeg.so внес туда всю работу с ffmpeg и вынес ту которая нужна мне в pascal-е.
Как итог я написал свой плеер не хуже чем vlc.
Вообще линух славится развитыми либлами и скудными пользовательскими интерфейсами большая часть из них вообще представляет bash-скрипты с управлением через консоль. В Windows программированием это считается ламерством, хаком. Зачем делать развитые визуальные контролы, когда легко можно забашит/забатить работу плеера.
Вообще может оказаться, что под люних умеют кодировать не более тысячи человек на весь мир, остальная масса прогеров - это башисты, питонщики.

tema писал(а): Допустим панелька маленькая и я с неё управляю открытием/закрытием этих окошек; могу эту панельку таскать и окошки вслед за ней и т.п.

это называется управление чужими окнами. в X11 там нет развитых коммуникаций между окнами и управления как в Windows путем сообщений, но есть DBAS и оконные менеджеры могут в нем работать, но тут я не копал.

Добавлено спустя 5 минут 42 секунды:
Re: Взаимодействие Linux приложения с окном другого приложения
tema писал(а):По сути выходит, что задача сводится к тому, чтобы отрисовать рамку вокруг окна rdesktop и "приклеить" это окно к перетаскиванию этой рамки, при этом скрыв заголовок окна rdesktop

Это делает оконный менеджер. Рисует рамку вокруг X11 окна, а вывод в чужое окно(gtk виджет) есть у vlc - но там оно прописано как опция.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Взаимодействие Linux приложения с окном другого приложен

Сообщение mig-31 » 10.08.2017 12:27:18

Стандартно для управления приложением из другого приложения используется DBUS.
Посмотрите вначале, если такая возможность реализована в rdesktop.
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Взаимодействие Linux приложения с окном другого приложен

Сообщение tema » 10.08.2017 13:40:31

Я всё сделал минут через 20 после последнего своего сообщения. Так обрадовался, что забыл отписаться :) У rdesktop в последней версии есть опция -X windowid. Проще простого :D
От программы требуется только указать этот самый windowid того окна, куда запихать rdesktop. Это я сделал так:
Код: Выделить всё
uses gtk2proc, gtk2extra, ctypes, gtk2;
Function GetXHandle(AWinControl : TWinControl) : culong;

var
  Widget: PGtkWidget;
begin
  Result:=0;
  if (AWinControl=nil) or (not AWinControl.HandleAllocated) then exit;
  Widget:={%H-}PGtkWidget(AWinControl.Handle);
  if Widget^.window = nil then exit;
  Result := gdk_window_xwindow(Widget^.window);
end;

Сейчас уже копаю gtk-vnc как реализовать VNC, чтобы был полный набор.
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: Взаимодействие Linux приложения с окном другого приложен

Сообщение v-t-l » 14.08.2017 15:41:04

Код: Выделить всё
$ man rdesktop
...
-X <windowid>
              Embed rdesktop-window in another window. The windowid is expected to be decimal or hexadecimal (prefixed by 0x).
....

О, уже не актуально! :-)
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013, Yandex [Bot] и гости: 25

Рейтинг@Mail.ru