Existe alguma biblioteca similar ao “Windows.h” para Ubuntu?

1. Existe alguma biblioteca similar ao “Windows.h” para Ubuntu?

Vitor
Bigshow2015

(usa Ubuntu)

Enviado em 16/03/2020 - 11:43h

Bom, a algum tempo, comecei a programar usando a API do Windows e criei um código que capturava o bitmap da minha tela e que tinha funções para mouse e teclado (Funcionava perfeitamente, eu estava utilizando OpenCV + Windows.h para conseguir ler a tela do meu notebook e movimentar o mouse sem dificuldades).

Por conta de alguns problemas, tive que migrar para o Ubuntu e estou encontrando dificuldades para criar um código similar, pois não existe aquela famosa biblioteca mágica "Windows.h" para o Ubuntu... Ou pelo menos não que eu saiba.

Gostaria de lembrar que programo em C++ e utilizo a biblioteca do OpenCV. Tenho bastante vontade de "replicar" aquele código, porém usando o Ubuntu. Como fazer isso?

A PERGUNTA É: Como criar um código em c++ utilizando alguma biblioteca como "linux.h" ou "ubuntu.h" (não sei se existe algo desse tipo, mas procuro algo como a "Windows.h") para o Ubuntu e que consiga abranger as funções de mouse, keyboard e bitmap do meu computador (ex.: A função, presente na biblioteca "Windows.h" - SetCursorPos() - movimenta o meu cursor do mouse)?

Desde já agradeço e espero que possam me ajudar.


  


2. Re: Existe alguma biblioteca similar ao “Windows.h” para Ubuntu?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/03/2020 - 07:14h

Bom dia, prezado.

Por razões históricas e por conta da natureza decentralizada do desenvolvimento de sistemas UNIX-like, não existe um <unix.h>, <linux.h> ou <ubuntu.h>. No mundo UNIX/POSIX, os arquivos de cabeçalho são divididos por assunto e por fornecedor, e você terá de incluir no seu programa tantos cabeçalhos quantos forem necessários para cobrir todas as funções que você empregar.

Existem múltiplas formas de capturar o conteúdo exibido pelo ambiente gráfico. Contudo, como existem diferentes ambiente gráficos, as opções que você terá em mãos vão depender daquilo que você tiver instalado e em uso na sua máquina, bem como do nível de abstração que você quiser utilizar. Por exemplo, se você quiser um nível de abstração baixo, haverá uma forma de fazer usando X11 e outra forma se você estiver usando Wayland. Subindo o nível de abstração, usar X11 ou Wayland pode não fazer diferença, mas você ainda terá múltiplas opções, tais como através de Qt, GTK+, FLTK etc.

Se você não quiser ter de ficar reescrevendo código para diferentes plataformas, subir o nível de abstração pode ser interessante. Se o utilizar o Qt, por exemplo, a forma de fazer a captura da tela não vai depender nem mesmo do sistema operacional: tanto no Windows quanto no Linux ou no OSX ou mesmo no Android, o código será rigorosamente o mesmo. Contudo, existe o preço a pagar, que é tamanho da biblioteca que suporta essas abstrações, e, eventualmente, algum custo, em tempo de execução, de mapear operações da lato nível e os dados por elas manipulados em operações nativas com seus respectivos tipos de dados, e vice-versa. Caso opte pelo maior nível de abstração, própria documentação do Qt tem como exemplo um programa de captura de tela para arquivo, que você provavelmente poderia adaptar para uso com o OpenCV (veja https://doc.qt.io/qt-5/qtwidgets-desktop-screenshot-example.html).

Se quiser ou tiver de trabalhar em baixo nível, a forma de fazer com o X11/Xlib provavelmente envolverá o uso de XGetImage() e de alguma função de conversão entre a representação empregada por essa função e o formato requerido pelas funções do OpenCV.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


3. Re: Existe alguma biblioteca similar ao “Windows.h” para Ubuntu?

Vitor
Bigshow2015

(usa Ubuntu)

Enviado em 17/03/2020 - 19:44h

paulo1205 escreveu:

Bom dia, prezado.

Por razões históricas e por conta da natureza decentralizada do desenvolvimento de sistemas UNIX-like, não existe um <unix.h>, <linux.h> ou <ubuntu.h>. No mundo UNIX/POSIX, os arquivos de cabeçalho são divididos por assunto e por fornecedor, e você terá de incluir no seu programa tantos cabeçalhos quantos forem necessários para cobrir todas as funções que você empregar.

Existem múltiplas formas de capturar o conteúdo exibido pelo ambiente gráfico. Contudo, como existem diferentes ambiente gráficos, as opções que você terá em mãos vão depender daquilo que você tiver instalado e em uso na sua máquina, bem como do nível de abstração que você quiser utilizar. Por exemplo, se você quiser um nível de abstração baixo, haverá uma forma de fazer usando X11 e outra forma se você estiver usando Wayland. Subindo o nível de abstração, usar X11 ou Wayland pode não fazer diferença, mas você ainda terá múltiplas opções, tais como através de Qt, GTK+, FLTK etc.

Se você não quiser ter de ficar reescrevendo código para diferentes plataformas, subir o nível de abstração pode ser interessante. Se o utilizar o Qt, por exemplo, a forma de fazer a captura da tela não vai depender nem mesmo do sistema operacional: tanto no Windows quanto no Linux ou no OSX ou mesmo no Android, o código será rigorosamente o mesmo. Contudo, existe o preço a pagar, que é tamanho da biblioteca que suporta essas abstrações, e, eventualmente, algum custo, em tempo de execução, de mapear operações da lato nível e os dados por elas manipulados em operações nativas com seus respectivos tipos de dados, e vice-versa. Caso opte pelo maior nível de abstração, própria documentação do Qt tem como exemplo um programa de captura de tela para arquivo, que você provavelmente poderia adaptar para uso com o OpenCV (veja https://doc.qt.io/qt-5/qtwidgets-desktop-screenshot-example.html).

Se quiser ou tiver de trabalhar em baixo nível, a forma de fazer com o X11/Xlib provavelmente envolverá o uso de XGetImage() e de alguma função de conversão entre a representação empregada por essa função e o formato requerido pelas funções do OpenCV.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


Muito Obrigado pela explicação. Gostaria de ter um pouco mais de explicação sobre esse assunto... Caso você possa me contatar de alguma maneira, eu ficaria muito feliz e bastante agradecido.

Ass.: Vítor.


4. Re: Existe alguma biblioteca similar ao “Windows.h” para Ubuntu?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/03/2020 - 20:13h

Bigshow2015 escreveu:

Muito Obrigado pela explicação. Gostaria de ter um pouco mais de explicação sobre esse assunto... Caso você possa me contatar de alguma maneira, eu ficaria muito feliz e bastante agradecido.


Pode perguntar aqui. O fórum público tem a vantagem de que outras pessoas podem ter a mesma dúvida, e eventualmente beneficiar-se do conhecimento que vier a ser exposto aqui.

Mas eu não garanto que vou saber responder sobre esse assunto, pois nunca trabalhei diretamente com as coisas de que ele trata. E essa é outra vantagem do fórum público: outras pessoas com conhecimento melhor e mais específico do que o meu podem vir a ajudar, também.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts