Взаимодействий с окнами в Linux

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

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

Indigo80
новенький
Сообщения: 19
Зарегистрирован: 31.07.2012 11:24:06

Re: Взаимодействий с окнами в Linux

Сообщение Indigo80 »

Можно через wmctrl -plx
https://www.youtube.com/watch?v=TaPgo0tcm1A
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

школота вирусы под линь писать начала ?
ваши проблемы.
п.с.
Под другой учёткой запустите...
Там ничего такого. Просто пример работы с апи иксов. В данном варианте - поиск окон и их координатов.
Ну а если школота. То папка unix (в фпс) вам в помощь. АПИ иксов в свободном доступе.
Плюс, учитывая лазарь, можно воспользоваться gtk или qt апи.
Мой бинарник на мсе. Вроде как без привязки к gtk, qt...

Добавлено спустя 30 минут 13 секунд:
Это тем кому страшна школота: https://youtu.be/mFIaA-nwCj4 :mrgreen:
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

А зачем тогда спрашивать? Знаете что можно - делайте. :lol:

п.с.
Вопрос - как .... убирается. Он не актуален. Потому что:
то я слал сообщение в другое моё окно и выполнял некоторые операции
. Кто его знает что вы хотите. Вполне возможно:
школота вирусы под линь писать начала ?
. А это уже не касаемо этого форума ...

А так:
Функции для работы с xlib - есть.
Описание функции - есть.
Осталось только прикрутить.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

выводит не понятный список окон.

Посмотрите в сторону: XmbTextPropertyToTextList и XGetWMName. Ну и после удачного получения "чистить" список не забывать - XFreeStringList.

я по всякому перепробовал как в инете... какие то абстрактные окна отображаются.
есть хорошие примеры на си (в Интернете). Понять что да как можно. Хотя, вполне достаточно и апи... Искать нужное долго и нудно, зато куда интереснее :lol:

...и самое главное... как перевести указатель на окно TWindow в THandle ?
э..э лин не равно винда... В принципе можете класс сделать - для удобства...

п.с.
Есть один нюанс - кодировка.
а тут он я хз... как проект называется ? %)
хм..: и кто же тут школьник??? Как то не стыкуется с этим:
если класс окна был мой, то я слал сообщение в другое моё окно
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

это форум разработчиков ПО, если хотели помочь или показать что-нибудь, можно было исходник кинуть, было бы гораздо полезнее бинарника!
Кому полезнее? Узнать что можно блокануть работу компа? И это без прав админа. Т.е. положить конфетку в красивой обёртке?

Школота - показывает ваш уровень, а не мой...

По поводу "пустоты". Там не пусто (хотя лазарь в этом малость кривоват). Повторяю:
Есть один нюанс - кодировка.

Учитывая что вы всё равно пользуете gtk или qt то почему xlib? Т.е., возможно, проще их использовать. Хотя они просто "дубляжиком" занимаются. но всё же...
Мсе, по крайней мере, имеет зависимость от xlib и нет привязки к gtk или qt.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

если не помогаете, тогда хотя бы не засоряйте тему.
одна вода... по делу ноль %)
обожаю флудить. Особенно нравиться на вирусные темы... Помочь школьнику - за честь...
Насчёт "по делу"... Вы уверены? Если вы не поняли о чем я писал... Это не значит что я дал ошибочное направление.
С другой стороны.... Может и найдутся помощники и посговорчивей... :mrgreen:

Добавлено спустя 12 минут 43 секунды:
п.с.
Почему: знаю что можно = знаю как???
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vfiuchcikicshuusrch, может, как обычно?

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject);
Var
  FHandle:THandle;

begin
      FHandle:=Form1.Handle;
end;
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vfiuchcikicshuusrch, возможно. Подозреваю, что это вообще разные указатели. Допустим, TWindow это указатель на структуру описания класса, а THandle это указатель на экземпляр класса. Или наоборот...
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

,
Последний раз редактировалось Vadim 07.08.2016 17:49:55, всего редактировалось 1 раз.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

vfiuchcikicshuusrch
TWindow - это и есть хэндл окна, это не объект.
Кстати, есть ещё функция FormToX11Window(TCustomForm): TWindow.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

vfiuchcikicshuusrch писал(а):мне бы теперь обратную процедуру найти...

Если ты говоришь об окнах чужих приложений, то такой связи нет. (Очевидно потому что другие приложения LCL не используют)

А если ты говоришь о своём приложении, то пожалуйста:

Код: Выделить всё

function X11ToWindow(XWin: X.TWindow): TCustomForm;
  for i:=0 to Screen.FormCount-1 do begin
    Result:=Screen.Forms[i];
    if FormToX11Window(Result)=XWin then Exit;
   end;
  Result:=nil;
end;

:D
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

vfiuchcikicshuusrch писал(а):эх жаль :(
мне нужно как раз с окнами других приложений общаться.
на самом деле приложение одно и моё, но их может быть запущено несколько экземпляров. и в винде я спокойной делаю это с помощью winapi.

всё правильно! попробуй общаться с ними через XWindow API.
Если оно вообще позволяет такое общение, потому что может не позволять из соображений безопасности.

vfiuchcikicshuusrch писал(а):интересно как тогда работает sendmessage в lazarus ?
он в linux есть и компилируется...
может быть ему будет достаточно TWindow в качестве указателя на окно ?! %)

Успехов с SendMessage, т.к. врят ли оно заработает.
LCL очень усердно эмулирует WinAPI на любой целевой платформе, но только для самой программы.
А при работе с внешними программыми (которые хз на чём написаны), такой номер не прокатит, и надёжнее всего использовать API целевой платформы.

Тут нужно ещё помнить о новой моде в ПО - песочницы. Официальные магазины ПО (Мелкософты и Яблоко) допускают к распорстранению только приложения которые работают в этой самой песочнице. Т.е. всё что не разрешено - запрещено. В частности песочниться может и на Винде запретить общение с чужим окнами.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

vfiuchcikicshuusrch писал(а):тут кстати написано, что сообщение другому приложению послать можно...

ну вот.
У тебя есть всё что нужно! чего ещё не хватает-то? или XSendEvent недостаточен для "некоторых операций"?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

колись, что за данные такие?
Ответить