2012-08-31 20 views
7

Qual è il modo migliore per creare un programma che cambi periodicamente lo sfondo del desktop? Mi piacerebbe anche creare una GUI per il programma. Sono uno studente di informatica e, in quanto tale, conosco la programmazione di base in Java e il C++ tra gli altri. Questo sarà fatto sul sistema operativo Windows 7.Cambia periodicamente lo sfondo del desktop periodicamente

Quale sarebbe la lingua migliore da usare per un progetto come questo?

Idealmente mi piacerebbe utilizzare l'orologio di sistema per attivare la modifica. È possibile?

Sono sopra la mia testa?

Qualsiasi risposta sarà molto apprezzata. Grazie.

+0

Qual è il risultato della tua due diligence per questo progetto? Che cosa ti hanno rivelato le tue attuali indagini attive? –

+1

Sicuramente non saresti in grado di farlo in java senza una chiamata JNI, ma C++ forse – axl

+0

Ho visto molte soluzioni a progetti simili usando una vasta gamma di lingue. Ho esaminato SystemParametersInfo e sembra che debba essere incorporato. Non ho visto nulla riguardo l'uso dell'orologio di sistema o l'uso di una GUI. –

risposta

9

Questo è un progetto ragionevolmente diretto e può essere eseguito facilmente con qualsiasi linguaggio che possa chiamare le funzioni API di Win32 (ad esempio C++). La funzione non ovvia per cambiare lo sfondo è SystemParametersInfo con il flag SPI_SETDESKWALLPAPER. Gli dai un nome di file di una nuova immagine e lo sfondo cambia.

+1

Ok, tutta la fiducia che questo sia un progetto abbastanza semplice è davvero d'aiuto e mi dà la sicurezza per iniziare questo progetto. Sembra che tutte le mie domande abbiano avuto risposta, e ora inizierò. Grazie a tutti. –

+0

Prego. Se hai altre domande, non esitare a chiedere (ricorda, Stack Overflow funziona meglio con domande specifiche). –

15

In Java:

import java.util.*; 

public class changer 
{ 
    public static native int SystemParametersInfo(int uiAction,int uiParam,String pvParam,int fWinIni); 

    static 
    { 
     System.loadLibrary("user32"); 
    } 

    public int Change(String path) 
    { 
     return SystemParametersInfo(20, 0, path, 0); 
    } 

    public static void main(String args[]) 
    { 
     String wallpaper_file = "c:\\wallpaper.jpg"; 
     changer mychanger = new changer(); 
     mychanger.Change(wallpaper_file); 
    } 

} 

In Win32 C++, è possibile utilizzare SetTimer per innescare un cambiamento.

#define STRICT 1 
#include <windows.h> 
#include <iostream.h> 

VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) 
{ 

    LPWSTR wallpaper_file = L"C:\\Wallpapers\\wallpaper.png"; 
    int return_value = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, wallpaper_file, SPIF_UPDATEINIFILE); 


    cout << "Programmatically change the desktop wallpaper periodically: " << dwTime << '\n'; 
    cout.flush(); 
} 

int main(int argc, char *argv[], char *envp[]) 
{ 
    int Counter=0; 
    MSG Msg; 

    UINT TimerId = SetTimer(NULL, 0, 2000, &TimerProc); //2000 milliseconds 

    cout << "TimerId: " << TimerId << '\n'; 
    if (!TimerId) 
    return 16; 

    while (GetMessage(&Msg, NULL, 0, 0)) 
    { 
     ++Counter; 
     if (Msg.message == WM_TIMER) 
     cout << "Counter: " << Counter << "; timer message\n"; 
     else 
     cout << "Counter: " << Counter << "; message: " << Msg.message << '\n'; 
     DispatchMessage(&Msg); 
    } 

    KillTimer(NULL, TimerId); 
return 0; 
} 
+0

Cosa dovrebbe scrivere id in mac os x. Non può caricare la libreria utente32. – saman

Problemi correlati