2012-08-31 10 views
7

デスクトップの壁紙を定期的に変更するプログラムを作成する最善の方法は何ですか?私はまた、プログラムの周りにGUIを作成したいと思います。私はコンピュータサイエンスの学生です。そのため、JavaやC++の基本プログラミングを知っています。これはWindows 7 OS上で行われます。定期的にデスクトップの壁紙をプログラム的に変更する

このようなプロジェクトにはどのような言語を使用するのが最適でしょうか?

理想的には、システムクロックを使用して変更をトリガーしたいと考えています。これは可能ですか?

私は頭の中にいますか?

すべての回答は非常に高く評価されます。ありがとうございました。

+0

このプロジェクトのデューデリジェンスの結果はどうなりますか?あなたの現在の活発な調査は何をあなたに明らかにしましたか? –

+1

あなたは確かにJNIコールなしでjavaでそれを行うことはできませんが、C++の可能性があります – axl

+0

私は、幅広い言語を使って同様のプロジェクトに多くのソリューションを見てきました。私はSystemParametersInfoを調べましたが、それは組み込まれているようです。私はシステムクロックの使用やGUIの使用に関しては何も見ていません。 –

答えて

9

これは合理的に簡単なプロジェクトであり、Win32 API関数(C++など)を呼び出すことができる任意の言語で簡単に行うことができます。壁紙を変更するための明白でない機能は、フラグを持つSystemParametersInfoです。新しいイメージのファイル名を付け、壁紙を変更します。

+1

これはかなり単純なプロジェクトであるという確信は本当に役に立ち、このプロジェクトを開始する自信があります。私の質問はすべて答えられたようだが、今は始めるだろう。みんなありがとう。 –

+0

あなたは大歓迎です。これ以上質問がある場合は、お気軽にお問い合わせください(Stack Overflowは特定の質問で最も効果的です)。 –

15
Javaでは

:Win32のC++では

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

} 

、あなたは変更をトリガーするためにSetTimerを使用することができます。

#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

idはMac OS Xで何を書くべきですか? user32ライブラリをロードすることはできません。 – saman

関連する問題