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.
Annonceindlæg fra Kingston Technology
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.
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).
Som den lalleglade fritids-java-koder jeg er, har jeg ingen anelse om hvad JNI er
JNI = Java Native Interface = metoden til at kalde native kode (DLL på Windows) fra Java
Hvis du kan bruge JNI så vil jeg godt lave koden.
Det lyder rigtigt godt. Jeg har ingen C compiler, så hvis du kan anbefale en ville det være godt
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]); } }
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)
Du bruger ovenstående build kommandoer og du har rettet stierne til Java SDK til
16. juni 2004 - 23:28
#12
OK ?
19. juni 2004 - 09:33
#13
Beklager jeg havde glemt at acceptere...
Kurser inden for grundlæggende programmering