2012-08-31 15 views
7

¿Cuál es la mejor manera de crear un programa que cambie periódicamente el fondo de escritorio? También me gustaría crear una GUI en todo el programa. Soy un estudiante de Ciencias de la Computación, y como tal, sé programación básica en Java y C++, entre otros. Esto se hará en el sistema operativo Windows 7.Cambie el fondo de pantalla de forma programada periódicamente

¿Cuál sería el mejor lenguaje para usar en un proyecto como este?

Idealmente, me gustaría utilizar el reloj del sistema para activar el cambio. es posible?

¿Estoy por encima de mi cabeza?

Cualquier respuesta será muy apreciada. Gracias.

+0

¿Cuál es el resultado de su diligencia debida para este proyecto? ¿Qué te han revelado tus investigaciones activas actuales? –

+1

Sin duda no sería capaz de hacer eso en Java sin una llamada JNI, pero C++ tal vez – axl

+0

He visto muchas soluciones para proyectos similares que utilizan una amplia gama de idiomas. He analizado SystemParametersInfo y parece que debe ser incorporado. No he visto nada relacionado con el uso del reloj del sistema o el uso de una GUI. –

Respuesta

9

Este es un proyecto razonablemente sencillo, y se puede hacer fácilmente con cualquier lenguaje que pueda llamar a las funciones de API de Win32 (C++, por ejemplo). La función no obvia para cambiar el fondo de pantalla es SystemParametersInfo con la bandera SPI_SETDESKWALLPAPER. Le asigna un nombre de archivo de una nueva imagen y el fondo de pantalla cambia.

+1

Ok, toda la confianza de que este es un proyecto bastante directo es realmente útil y me da la confianza para comenzar este proyecto. Parece que todas mis preguntas fueron respondidas, y ahora comenzaré. Gracias a todos. –

+0

De nada. Si tiene más preguntas, no dude en preguntar (recuerde, Stack Overflow funciona mejor con preguntas específicas). –

15

En 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); 
    } 

} 

En Win32 C++, puede utilizar SetTimer para desencadenar un cambio.

#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

¿Qué debería escribir id en mac os x? No puede cargar la biblioteca user32. – saman

Cuestiones relacionadas