2012-09-14 14 views
7

私はVLCがデスクトップ上で直接ビデオを再生できることに気付きました。私が学校でそうしたとき、Windows XPで、それはアイコンの下で遊んだ。私が家で試したとき、Windows 7ではアイコンを隠しました。私はそれがオペレーティングシステムかVLCのアップデートかどうかはわかりませんが、アイコンの下で再生することに興味があります。VLCはデスクトップ上でどのようにビデオを再生しますか?

これに気づいた後、私は、アニメーションデスクトップの種類を作る考えがありました。何も特別なものではなく、自分のためにいくつかのビデオを選択してください。私が始めたアイデアは、(mciSendStringを使って)自分のウィンドウでビデオを再生し、各フレームのPrintWindowを実行してファイルに保存し、デスクトップの壁紙をファイルとして設定することでした。私はそれ以来、特定のコードを紛失しましたが、それはかなりうまく機能せず、言うまでもなく、恐ろしく実行されます。

それに戻って、私はそれよりもはるかに効率的な方法が必要であることを認識しましたが、それが何であるかはかなり分かりません。

ビデオの親ウィンドウをGetDesktopWindowに設定しようとしましたが、すべてのウィンドウを最小限に抑えてビデオを再生するタスクバーに新しいウィンドウを残しましたが、デスクトップをクリックして見ることができます飛行機のボタンを押すか、Win + Dを押す。

その後、デスクトップのフォルダビューウィンドウの親ウィンドウで同じ操作を試みました。その結果、ビデオの再生と同じ寸法のウィンドウが表示されましたが、今回はデスクトップにアクセスできず、新しいウィンドウも作成されませんでした。それはデスクトップの大部分を上回っていたようだが、再生ウィンドウのサイズが小さいためガジェットが上を行き、右と下の領域がまだ表示されている。

VLCはデスクトップ上でダイナミックな壁紙のように見えるのですか?アイコン(Windows 7で追加した場合はガジェット)の下で再生するのはかなり難しいですか?プログラム自体はWindows XPで使用されます。 DirectShowに役立つものがあるのか​​どうかはわかりませんが、MCIだけでなく他のWindows APIの分野でも使用したいと思います。私はそれが違いをもたらす場合、ソリューションがC++にあることを好むでしょう。

+0

Windows XPで壁紙として利用できるとは思いますが、Windows 7で利用できるかどうかはわかりません。 (あなたはC++でそれをタグ付けしています)コントロールですが、それは私が信じることを非常に制限しています。しかし、もう少し優しくしたいことを達成するための他の方法があるかもしれません。 – nullpotent

+0

@iccthedral、うまくいけば、それは何かです。私はActiveXコントロールを使用していませんが、間違いなく開始できます。私は学校でしか使用しないので、XPでの作業は問題ではありません。 – chris

+0

あなたがこれを楽しいためにしたいのでない限り、[ここに](http://www.dreamsceneseven。com /)Windows 7で[Windows DreamScene](https://en.wikipedia.org/wiki/Windows_DreamScene)を有効にするユーティリティ。 – Praetorian

答えて

7

VLCは壁紙を特定の色に設定し、次にDirectDrawを使用してデスクトップ用に定義されたオーバーレイサーフェス内のそのカラーキーを更新します。

私はそれを自分自身をやっていないが、ここではより多くの情報を探すためにいくつかの場所です決してました:あなただけのデスクトップを取ることができ

+0

私はそれに感謝します、ありがとう。私はそれを試してみると、あなたは聞くでしょう。 – chris

+1

これはかなりうまくいく、ありがとう。仕事になるにはちょっとしたことがありますし、私はうまくいくでしょう:) – chris

3

独自のコンポーネントまたはデータを処理して描画する

試してみてください。

#include <stdafx.h> 
#include <windows.h> 
#include <objidl.h> 
#include <gdiplus.h> 
using namespace Gdiplus; 
#pragma comment (lib,"Gdiplus.lib") 

VOID OnPaint(HDC hdc) 
{ 
    Graphics graphics(hdc); 
    Pen  pen(Color(255, 0, 0, 255)); 
    graphics.DrawLine(&pen, 0, 0, 200, 100); 
} 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow) 
{ 
    HWND    hWnd; 
    MSG     msg; 
    WNDCLASS   wndClass; 
    GdiplusStartupInput gdiplusStartupInput; 
    ULONG_PTR   gdiplusToken; 

    // Initialize GDI+. 
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); 

    wndClass.style   = CS_HREDRAW | CS_VREDRAW; 
    wndClass.lpfnWndProc = WndProc; 
    wndClass.cbClsExtra  = 0; 
    wndClass.cbWndExtra  = 0; 
    wndClass.hInstance  = hInstance; 
    wndClass.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
    wndClass.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
    wndClass.lpszMenuName = NULL; 
    wndClass.lpszClassName = TEXT("GettingStarted"); 

    RegisterClass(&wndClass); 

    hWnd = GetDesktopWindow(); 

    ShowWindow(hWnd, iCmdShow); 
    UpdateWindow(hWnd); 

    while(GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    GdiplusShutdown(gdiplusToken); 
    return msg.wParam; 
} // WinMain 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
    WPARAM wParam, LPARAM lParam) 
{ 
    HDC   hdc; 
    PAINTSTRUCT ps; 

    switch(message) 
    { 
    case WM_PAINT: 
     hdc = BeginPaint(hWnd, &ps); 
     OnPaint(hdc); 
     EndPaint(hWnd, &ps); 
     return 0; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     return 0; 
    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
} // WndProc 
関連する問題