Alterar o papel de parede do desktop no Java?

Olá. Eu preciso alterar o papel de parede do usuário na minha aplicação Java. Já consigo imaginar que isso não seja possível sem alguma “gambiarra” com VB script como eu vi em uma rápida pesquisa no Google, já que Java não tem muita efetividade com o sistema operacional por ser multiplataforma. Mesmo se eu fosse usar uma “gambiarra” com VB script por exemplo, isso só funcionaria no Windows, e eu preciso se uma solução multiplataforma. Notei também esse link, porém o arquivo já foi removido. Se alguém aí conhece alguma maneira de fazer isso, por favor me dê uma luz!

Abraço.

Cara, esse foi o primeiro link que eu vi. Eu nunca usei JNA e não consegui rodar o exemplo. E eu simplesmente não entendi. Eu não sei se esse exemplo funciona em todos os sistemas, mas pelo que eu vi, o cara tava procurando uma solução só para Windows.

Verdade, não reparei que você queria multiplataforma. Não vai funcionar porque depende da presença da user32, que é uma API do Windows.

Uma opção, caso o Java seja inadequado (o que é possível), é criar um aplicativo nativo ou comando específico capaz disso para cada plataforma que você quiser suportar. Por exemplo, no Windows você usa o código desse post. Já no Gnome (Linux), tente algo como http://askubuntu.com/questions/66914/how-to-change-desktop-background-from-command-line-in-unity ou http://raspberrypi.stackexchange.com/questions/13011/how-do-i-change-the-desktop-wallpaper-from-the-cli . Nesse caso, você basicamente invoca um script de linha de comando para fazer a tarefa.

Pode tentar também criar um programa nativo (com C++ ou Lazarus, por exemplo) e chamá-lo pelo Java. Só não sei te indicar como fazer isso para cada linguagem e ambiente, teria que pesquisar um pouco.

Abraço.

Então eu teria que fazer uma versão para cada ambiente gráfico do Linux? Uma solução diferente para cada um? E para Mac? Teria que criar outra solução?

Basicamente, sim.

Note que você teria de fazer isso de qualquer forma, já que em cada ambiente (Windows, Linux, MacOS) tem meios próprios para realizar essa mudança, independente se é via Java ou nativo. A não ser que você tenha uma blibioteca específica para isso (pode dar uma olhada aqui ou aqui, mas pode haver dependências), terá esse trabalho mesmo.

Quantos ambientes Linux pretende suportar? Se for só KDE e Gnome/Unity (Ubuntu), deve ter pouco trabalho.

Abraço.

Basicamente eu queria que funcionasse igual em todo sistema. Eu encontrei um exemplo em Java e depois vou testar no Linux pra ver se funciona, mas provavelmente não, mas eu fiquei curioso sobre esse primeiro link, vou estudar isso, não conhecia essa linguagem, mas vi que dá para implementar no Java.

Eu estou tentando compilar a biblioteca go do link para implementar no meu projeto, porém estou recebendo uma mensagem de erro, não sei se tu programa go, mas se não, talvez alguém aqui saiba, então, o erro é este:

C:\Go\src\github.com\reujab\wallpaper>go build
windows.go:5:8: cannot find package "golang.org/x/sys/windows/registry" in any of:
        C:\Go\src\vendor\golang.org\x\sys\windows\registry (vendor tree)
        C:\Go\src\golang.org\x\sys\windows\registry (from $GOROOT)
        C:\Users\thall\go\src\golang.org\x\sys\windows\registry (from $GOPATH)