2012-09-14 6 views
7

뒤로, 나는 VLC가 데스크톱에서 직접 비디오를 재생할 수있는 능력이 있다는 것을 알아 차렸다. 내가 학교에서 그렇게했을 때 Windows XP에서 아이콘 아래에서 재생되었습니다. Windows 7에서 집에서해볼 때 아이콘이 숨겨졌습니다. 운영체제인지 또는 VLC의 업데이트인지 확실하지 않지만 아이콘 아래에서 재생하는 데 관심이 있습니다.VLC는 데스크탑에서 비디오를 어떻게 재생합니까?

이 사실을 알게 된 후에 나는 애니메이션 데스크탑을 만들 생각을했습니다. 특별한 것은 없지만 내 용도로만 몇 가지 선택 비디오. 필자가 시작한 아이디어는 (mciSendString을 사용하여) 내 창에서 비디오를 재생하고 각 프레임의 PrintWindow을 실행하여 파일에 저장하고 파일로 바탕 화면 배경 무늬를 설정하는 것이 었습니다. 그 이후로 특정 코드를 잃어 버렸지 만, 그 코드는 제대로 작동하지 않았으며 말할 필요도없이 끔찍하게 수행 할 것입니다.

다시 돌아와서, 나는 그보다 훨씬 효율적인 방법이 있어야한다는 것을 깨달았지만, 그것이 무엇인지는 확실히 알 수 없습니다.

비디오의 부모 창을 GetDesktopWindow으로 설정했는데, 비디오를 재생하는 작업 표시 줄에 새 창을 남기고 모든 창을 최소화하는 효과를 얻으려고했지만, 클릭하여 바탕 화면을 볼 수있었습니다. aero peek 버튼이나 Win + D를 치면됩니다.

그런 다음 데스크톱의 폴더보기 창의 부모 창과 동일한 시도를했습니다. 결과는 비디오를 재생하는 동일한 크기의 창 이었지만 이번에는 바탕 화면에 액세스 할 수 없으며 새 창이 만들어지지 않았습니다. 그것은 데스크톱의 대부분을 넘나들고있는 것처럼 보이지만 가제트는 위쪽으로 가고 오른쪽과 아래쪽은 재생 창 크기가 작아서 표시됩니다.

VLC는 마치 바탕 화면에서 동적 바탕 화면처럼 보이게하려면 어떻게해야합니까? Icon (그리고 Windows 7에 추가 할 경우 가젯) 아래에서 게임을 실행하는 것이 상당히 어렵습니까? 프로그램 자체는 Windows XP에서 사용됩니다. DirectShow가 도움이 될만한 것이 있는지는 잘 모르겠지만, MCI 이외의 다른 Windows API 영역에서도 사용할 수 있습니다. 차이가 있다면 C++로 솔루션을 선호합니다. .NET은 또한 잘 작동하지만 약간의 시간이 걸릴 수도 있습니다.

+0

Windows XP에서 웹 페이지를 배경 화면으로 사용할 수 있다고 생각하지만 Windows 7에서 사용할 수 있는지 확실하지 않습니다. (당신이 C++로 태그를 지정했기 때문에) 컨트롤을 제공하지만, 그것은 내가 믿는 것을 매우 제한하고있다. 하지만 조금 더 우아하게 원하는 것을 성취 할 수있는 다른 방법이있을 것입니다. – nullpotent

+0

@iccthedral, 작동한다면, 그것은 뭔가입니다. ActiveX 컨트롤을 사용하지 않았지만 확실히 시작할 수 있습니다. 나는 단지 학교에서 그것을 사용할 것이므로 XP에서 일하는 것이 문제가되지 않습니다. – chris

+0

당신이 이것을 재미있게하고 싶지 않다면 [here 's] (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 
관련 문제