Avatar billede looppen Nybegynder
08. maj 2004 - 20:58 Der er 12 kommentarer og
1 løsning

Set Wallpaper i XP fra java

Spørgsmålet er ikke sikkert ikke så svært, men det haster lidt, derfor de mange points.

Kan nogen fortælle mig hvordan man sætter et JPG billeder ind som baggrundsbillede på skrivebordet i Windows XP, fra en java applikation?

Det er vigtigt at det er et jpg billede og at det virker i windows XP pro.
Avatar billede arne_v Ekspert
08. maj 2004 - 20:59 #1
Kan kun gøres via JNI.

Du skriver en stump C/C++ kode som gøre det, builder en DLL og bruger den fra Java.
Avatar billede arne_v Ekspert
08. maj 2004 - 21:05 #2
SystemParametersInfo med SPI_SETDESKWALLPAPER er kaldet der skal bruges.

Hvis JNI er godt nok kan jeg lave C koden (men jeg skal lige vide hvilken C/C++
compiler du bruger).
Avatar billede looppen Nybegynder
08. maj 2004 - 21:38 #3
Som den lalleglade fritids-java-koder jeg er, har jeg ingen anelse om hvad JNI er
Avatar billede arne_v Ekspert
08. maj 2004 - 22:32 #4
JNI = Java Native Interface = metoden til at kalde native kode (DLL på Windows)
fra Java
Avatar billede arne_v Ekspert
14. maj 2004 - 22:17 #5
Hvis du kan bruge JNI så vil jeg godt lave koden.
Avatar billede looppen Nybegynder
18. maj 2004 - 20:25 #6
Det lyder rigtigt godt.
Jeg har ingen C compiler, så hvis du kan anbefale en ville det være godt
Avatar billede arne_v Ekspert
19. maj 2004 - 23:58 #7
SetWall.java:

public class SetWall {
    public native void setWallPaper(String fnm);
    static {
        System.loadLibrary("setwall");
    }
}

SetWall.c:

#include <windows.h>

#include <jni.h>

JNIEXPORT void JNICALL Java_SetWall_setWallPaper(JNIEnv *cntx, jobject me, jstring fnm)
{
  const char *fnm2 = (*cntx)->GetStringUTFChars(cntx, fnm, 0);
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (char *)fnm2, SPIF_UPDATEINIFILE);
}

build med gcc:

javac SetWall.java
javah -jni SetWall
gcc -c -I\sunjava\jdk1.3.1\include -I\sunjava\jdk1.3.1\include\win32 SetWall.c -o SetWall.obj
gcc -s -shared -Wl,--export-all,--kill-at SetWall.obj -o setwall.dll

simpelt test program:

public class Test {
    public static void main(String[] args) throws Exception {
        SetWall sw = new SetWall();
        sw.setWallPaper(args[0]);
    }
}
Avatar billede arne_v Ekspert
19. maj 2004 - 23:59 #8
Avatar billede arne_v Ekspert
24. maj 2004 - 23:59 #9
Kunne du bruge det ?
Avatar billede looppen Nybegynder
25. maj 2004 - 18:36 #10
jeg får en fejl når jeg skal builde

SetWall.c:3:17: jni.h: No such file or directory
SetWall.c:5: syntax error before "void"
SetWall.c:5: parse error before '*' token
SetWall.c: In function `Java_SetWall_setWallPaper':
SetWall.c:7: `cntx' undeclared (first use in this function)
SetWall.c:7: (Each undeclared identifier is reported only once
SetWall.c:7: for each function it appears in.)
SetWall.c:7: `fnm' undeclared (first use in this function)
Avatar billede arne_v Ekspert
25. maj 2004 - 19:09 #11
Du bruger ovenstående build kommandoer og du har rettet stierne til Java SDK
til
Avatar billede arne_v Ekspert
16. juni 2004 - 23:28 #12
OK ?
Avatar billede looppen Nybegynder
19. juni 2004 - 09:33 #13
Beklager jeg havde glemt at acceptere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester