Autor Tópico: Controlar Papéis de Parede  (Lida 3626 vezes)

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Controlar Papéis de Parede
« Online: 24 de Maio de 2010, 13:15 »
Olá pessoal. Estou desenvolvendo um projeto em C++ simples que ficará ligado no sistema e mudará, de tempos em tempos, o papel de parede. Como tem um tempinho que não trabalho com C++ estou com algumas dúvidas. O código abaixo retorna os seguintes erros, no G++.

Código: [Selecionar]
#include <cstdlib>
#include <iostream>

using namespace std;

int main(void)
{
    int i = 0;
    int j = 0;
    string file[5];
    file[0] = "/home/mhkgalvez/Imagens/Papéis\ de\ Parede\ Bíblicos/aurora.jpg";
    file[1] = "/home/mhkgalvez/Imagens/Papéis\ de\ Parede\ Bíblicos/Bibi.jpg";
    file[2] = "/home/mhkgalvez/Imagens/Papéis\ de\ Parede\ Bíblicos/blackstyle.png";
    file[3] = "/home/mhkgalvez/Imagens/Papéis\ de\ Parede\ Bíblicos/lud.JPG";
    file[4] = "/home/mhkgalvez/Imagens/Papéis\ de\ Parede\ Bíblicos/rose.jpg";
     while (i<1000)
    {
        if (i%2==0)
        {
            system("gconftool-2 -t str -s /desktop/gnome/background/picture_filename "+file[j]);
            j++;
        }
        i++;
    }
    return 0;
}

Citar
main.cpp: In function ‘int main()’:
main.cpp:11: warning: unknown escape sequence: '\040'
main.cpp:11: warning: unknown escape sequence: '\040'
main.cpp:11: warning: unknown escape sequence: '\040'
main.cpp:12: warning: unknown escape sequence: '\040'
main.cpp:12: warning: unknown escape sequence: '\040'
main.cpp:12: warning: unknown escape sequence: '\040'
main.cpp:13: warning: unknown escape sequence: '\040'
main.cpp:13: warning: unknown escape sequence: '\040'
main.cpp:13: warning: unknown escape sequence: '\040'
main.cpp:14: warning: unknown escape sequence: '\040'
main.cpp:14: warning: unknown escape sequence: '\040'
main.cpp:14: warning: unknown escape sequence: '\040'
main.cpp:15: warning: unknown escape sequence: '\040'
main.cpp:15: warning: unknown escape sequence: '\040'
main.cpp:15: warning: unknown escape sequence: '\040'
main.cpp:20: error: cannot convert ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >’ to ‘const char*’ for argument ‘1’ to ‘int system(const char*)’

O erro na linha 20 refere-se aos argumentos da função system, que devem ser const char e não string. Como faço essa conversão? E mais, que erro é esse "unknown escape sequence: \040"? Como resolvê-lo?
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Offline jeflui

  • Usuário Ubuntu
  • *
  • Mensagens: 745
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #1 Online: 24 de Maio de 2010, 15:54 »
O problema é a barra invertida "\", use duas "\\" deve resolver.

Offline José Vitor

  • Usuário Ubuntu
  • *
  • Mensagens: 33
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #2 Online: 24 de Maio de 2010, 16:37 »
O problema é a barra invertida "\", use duas "\\" deve resolver.

Use assim:
Código: [Selecionar]
file[0] = "/home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/aurora.jpg";
ou assim (acho melhor):
Código: [Selecionar]
file[0] = "'/home/mhkgalvez/Imagens/Papéis de Parede Bíblicos/aurora.jpg'";com uma aspa simples (apóstrofo) delimitando a string para o shell.

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Re: Controlar Papéis de Parede
« Resposta #3 Online: 24 de Maio de 2010, 20:15 »
A dica da barra dupla invertida foi a que deu certo. Resolveu este problema. Mas agora, o problema está no funcionamento do aplicativo. Como eu não consegui concatenar a string final dentro já da função system, coloquei o código de mudança do papel de parede já dentro do vetor:

Código: [Selecionar]
#include <cstdlib>
#include <iostream>

using namespace std;

int main(void)
{
    int i = 0;
    int j = 0;
    const char *file[5];
    file[0] = "gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/aurora.jpg";
    file[1] = "gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/Bibi.jpg";
    file[2] = "gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/blackstyle.png";
    file[3] = "gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/lud.JPG";
    file[4] = "gconftool-2 -t str -s /desktop/gnome/background/picture_filename /home/mhkgalvez/Imagens/Papéis\\ de\\ Parede\\ Bíblicos/rose.jpg";
    while (i<1001)
    {
        if (i%200==0)
        {
            system(file[j]);
            j++;
        }
        i++;
    }
    return 0;
}

O problema é que ele não muda para os papéis de parede desejados. Antes, muda uma só vez para a cor marrom e assim permanece até terminar.
Isso na verdade é um problema do comando
Citar
gconftool-2 -t str -s
pois se eu uso ele puramente no terminal, sem o aplicativo rodando, ele também tem o mesmo efeito, a saber, ao invés de mudar o papel de parede, ele faz a tela ficar marrom.
« Última modificação: 24 de Maio de 2010, 20:17 por mhkgalvez »
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #4 Online: 24 de Maio de 2010, 21:39 »
Não sei se serve para o seu propósito, mas o papel de parede do Gnome pode ser um xml, com quantas imagens você quiser e cada imagem fica o tempo que você desejar. É uma mudança na forma de resolver o seu problema, no lugar de executar um aplicativo o tempo todo, você pode criar um aplicativo que gere o xml a partir de imagens pré-definidas ou mesmo de um diretório. É uma abordagem melhor, na minha opinião.

Offline jeflui

  • Usuário Ubuntu
  • *
  • Mensagens: 745
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #5 Online: 24 de Maio de 2010, 22:32 »
Se for para fazer de outra forma, bastava criar um shell script e colocar no crontab.
Voltando para o seu problema, que tal fazer um teste mais "amigável", coloca uma imagem no seu home mesmo. Sem ser nesse diretório com espaços no nome e acentuado. Teste no terminal, a partir do momento que funcionar, você testa no seu código.

Offline José Vitor

  • Usuário Ubuntu
  • *
  • Mensagens: 33
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #6 Online: 25 de Maio de 2010, 00:26 »
Não sei se serve para o seu propósito, mas o papel de parede do Gnome pode ser um xml, com quantas imagens você quiser e cada imagem fica o tempo que você desejar. É uma mudança na forma de resolver o seu problema, no lugar de executar um aplicativo o tempo todo, você pode criar um aplicativo que gere o xml a partir de imagens pré-definidas ou mesmo de um diretório. É uma abordagem melhor, na minha opinião.

Eu já tinha visto visto esse arquivo backgrounds.xml (ou parecido), mas não tinha me animado o suficiente prá saber como como funciona. Bom saber, apesar de eu detestar xml.

Com relação ao problema do colega acima faria um shell script rodando a partir do .bash_profile...aliás, já fiz isso uma vez...

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Re: Controlar Papéis de Parede
« Resposta #7 Online: 25 de Maio de 2010, 11:15 »
O que é mesmo shell script? E bash_profile?

Quanto a testar um link mais simples, não deu certo. O problema persiste.
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Offline jeflui

  • Usuário Ubuntu
  • *
  • Mensagens: 745
    • Ver perfil
Re: Controlar Papéis de Parede
« Resposta #8 Online: 25 de Maio de 2010, 12:02 »
gconftool-2 -t str --set /desktop/gnome/background/picture_filename "/home/mhkgalvez/rose.jpg"

Coloca a imagem "rose.jpg" no seu home.

Pelo menos isso tem que funcionar antes de você começar a fazer o resto.

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Re: Controlar Papéis de Parede
« Resposta #9 Online: 26 de Maio de 2010, 17:50 »
Ah sim, e colocaria essas aspas em C++, já que as mesmas são usadas pelo compilador para identificar um string?
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."