Strona 1 z 1

Plik video jako tapeta pulpitu

Nowy postNapisane: niedziela, 14 września 2008, 09:40
przez Cyfrowy Baron
Program AllPlayer i jeszcze kilka innych mają funkcję umożliwiającą wrzucenie odtwarzanego pliku video na pulpit jako tło pulpitu, przy czym robią to tak sprytnie, że ikony wciąż są widoczne na pulpicie i nawet obsługiwana jest przeźroczystość tekstu pod ikonami, czego nie uda się zrobić wstawiając np. animowany gif.

Przeprowadziłem kilka testów z podobnym mechanizmem, testy polegały głównie na przechwytywaniu pulpitu i wrzucaniu tam filmu, jednak efekt różni się od możliwości AllPlayera, jest w porównaniu z nim mało efektywny, poza tym pulpitu nie da się praktycznie używać.
Wykorzystany przeze mnie mechanizm jest bardzo prosty:
Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
hWnd = FindWindow(0, "Program Manager");
hWnd_2 = GetWindow(hWnd, GW_CHILD);
::SetParent(hWnd_2, this->Handle);
::SetParent(Panel2->Handle, hWnd);

Panel2->BoundsRect = Screen->WorkAreaRect;
MediaPlayer1->DisplayRect = Screen->WorkAreaRect;

Application->ProcessMessages();
this->TransparentColor = true;
  ::SetParent(hWnd_2, HWND_DESKTOP);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
::SetParent(hWnd_2, hWnd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDblClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------


Niestety to nie jest to, czego oczekuję.

Poszukuję informacji o tym, jaki mechanizm wykorzystuje AllPlayer, czegoś od czego mógłbym zacząć. Być może natknąłeś się gdzieś na jakąkolwiek informację w tym temacie.

Proszę mi jednak nie pisać o wrzucaniu na pulpit animowanych gifów, czy też animacji flash, gdyż nie o to tutaj chodzi.

Re: Plik video jako tapeta pulpitu

Nowy postNapisane: czwartek, 18 września 2008, 23:01
przez kinio
Cześć CB!

Kiedyś chciałem zrobić podobny programik, ale nie do końca mi to wyszło. Powiem szczerze że po przeczytaniu tego postu na nowo rozbudziła sie moja chęć dokończenia dzieła :)
Programik który kiedyś napisałem wykorzystywał OpenGL do odtworzenia filmu i odtwarzał go bezpośrednio na oknie pulpitu. Wszystko oczywiście chodziło płynnie, menu kontekstowe pulpitu pozostało normalne, okna można było przesuwać itp, była tylko jedna wada: o ile dało się także klikać na ikony pulpitu o tyle były one zamazywane przez film i raczej niewidoczne - więc to nie jest to czego wymagasz.

Natomiast kiedyś nasunęła mi się myśl, ale to by trzeba sprawdzić czy da się to zrobić, bo nie próbowałem. Mianowicie można utworzyć takie sprytne okno, które będzie niewidoczne dla urządzeń wskazujących i np. klikając w obszarze tego okna tak naprawdę klikniemy w obiekt znajdujący się bezpośrednio pod nim. To rozwiązanie o ile proste o tyle ma jedną wadę. Aby okno mogło być ignorowane przez urządzenia wskazujące to trzeba uaktywnić kanał alpha a co za tym idzie znacznie to obciąży procesor i na słabszych maszynach pewnie nie będzie dobrze chodzić. Czyli całość by wyglądała tak: Video odtwarzane na pełnym ekranie, tylko z włączonym kanałem alpha ale zupełnie niewidoczne i nieosiągalne przez urządzenia wskazujące. Sterowanie takim oknem z poziomu innego.

Jeżeli już znasz to o czym mówię to ok, natomiast jeżeli nie a byłbyś zainteresowany którym kolwiek z tych sposobów pisz.

Pozdr!

Re: Plik video jako tapeta pulpitu

Nowy postNapisane: piątek, 19 września 2008, 08:48
przez Cyfrowy Baron
Dla okna wideo nie da się ustawić kanału Alpha, już tego próbowałem. Postępowałem bardzo podobnie jak Ty.
Jeżeli chodzi o OpenGL to nie posiadam w tym temacie wiedzy, interesowałem się trochę DirectDraw i na tym stanąłem.
Jeżeli jednak chodzi o OpenGL to istnieje funkcja wglCreateLayerContext która mogłaby być pomocna:

► 


Próbowałem metody polegającej na tym, że w oknie własnego programu umieściłem pulpit (wymaga usunięcia tapety i ustawienia czarnego tła), ustawiłem dla tego okna przeźroczystość tak że widoczne były tylko ikony, a reszta była przeźroczysta, następnie wrzucałem na pulpit film i działało, pulpit też, można było klikać. Pojawiła się niestety masa problemów, na pewno dałoby się usprawnić mechanizm, ale juz wtedy widziałem, że to nie to, mechanizm zastosowany w AllPlayer jest inny, bazuje chyba na warstwach pulpitu.

Obciążenie procesora jest duże, więc poniżej 1 GHz nie ma co marzyć o prawidłowym działaniu, AllPlayer też mocno obciąża procesor. Wtedy mnie to zniechęciło, ale dziś mamy już procesy cztero-rdzeniowe, więc mogło by to mieć sens, poza tym jestem ciekaw takiego mechanizmu i dlatego jak znajdę wolną chwilę znów zacznę kombinować.

Re: Plik video jako tapeta pulpitu

Nowy postNapisane: piątek, 19 września 2008, 12:55
przez kinio
Dla okna wideo nie da się ustawić kanału Alpha, już tego próbowałem.

Może źle się zrozumieliśmy, chodziło mi o uzyskanie mniej więcej takiego efektu jak załączonym programiku, ale faktycznie przeźroczystość u mnie działa tylko dla plików avi.