3

私が使用しているもの:

ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,
                                           0, "picturefile", 0)

壁紙を変更します。

しかし、画面ごとに異なる壁紙を配置する簡単な方法があるかどうか疑問に思っています。

この機能はWindowsの標準ではありませんが、ultramonのような外部アプリケーションがこれを実行します。誰もがそれがどのように機能するか知っていますか?

2つの画像を1つに結合して壁紙を作成するとうまくいくと思っていた方法ですが、それでも1つの画像を両方の画面にまたがる方法が必要です。

また、モニターのセットアップ、各画面の解像度、およびそれらの配置に関する情報を取得するにはどうすればよいですか?WindowsのGUI表示設定に表示されるものと同様ですが、数値です。

4

1 に答える 1

7
  1. 画像を結合して大きな画像にした後、壁紙モードをタイルに設定して、画像がデスクトップ全体に広がるようにする必要があります (そうしないと、各モニターで再起動します)。

    これを行うにはいくつかの方法があります:

    a) IActiveDesktopを使用する(Active Desktop を使用する必要はありませが、心配する必要はありません)。これは、Win7 では新しい壁紙がフェード インするため、最も便利です。

    IActiveDesktop / CLSID_ActiveDesktop COM オブジェクトを作成し、SetWallpaper、SetWallpaperOptions、最後に ApplyChanges を呼び出します。(私は Python 開発者ではないので、COM オブジェクトへのアクセス方法が正確にはわかりません。申し訳ありません。)

    また:

    b) レジストリ経由。これはそれほど良くはありませんが、十分に機能します。

    アンダーHKEY_CURRENT_USER\Control Panel\Desktopセット:

    • TileWallpaper to (REG_SZ) 1 (つまり、数字の 1 ではなく文字列 "1")
    • WallpaperStyle (REG_SZ) へ 0 (つまり、数字の 0 ではなく文字列 "0")
    • 次に、既に行っているように SystemParameterInfo(SPI_SETDESKTOPWALLPAPER...) を呼び出します。

    .

    ところで、私が見ているコードは、IActiveDesktop を使用し、それが失敗した場合にレジストリにフォールバックしSPIF_UPDATEINIFILE | SPIF_SENDCHANGE、最後の引数として SystemParameterInfo に渡します。現在、間違っている可能性のある 0 を渡しています。

  2. EnumDisplayMonitorsは、モニターの詳細を取得するための Win32 API で、画面サイズや相互の位置などを含みます。

    その API は、提供する必要があるコールバック関数を介して結果を返します。(モニターごとに 1 回呼び出します。) 私は Python 開発者ではないので、Python からそのような関数を呼び出す方法がわかりません。

    「Python EnumWindows」 (EnumWindows は一般的に使用される API であり、同じ方法で結果を返します) を簡単に Google で調べてみると、それについて話している人や、コールバックに Lambda 関数を使用している人が見つかります。 Python に詳しい方にお聞きします。

    注: モニターが隣り合っていない場合や位置が合っていない場合は、忘れずに対処してください。コンパイルされた画像には、すべてのモニターで正しく並べるために空白の領域が必要になる場合があります。モニターの 1 つを動かして、デスクトップ全体の PrtScn スクリーンショットを作成すると、結果の意味がわかります。

于 2010-12-17T08:13:54.510 に答える