Plik video jako tapeta pulpitu

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Plik video jako tapeta pulpitu

Nowy postprzez Cyfrowy Baron » niedziela, 14 wrzeÅ›nia 2008, 09:40

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plik video jako tapeta pulpitu

Nowy postprzez kinio » czwartek, 18 wrzeÅ›nia 2008, 23:01

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!
If a machine is expected to be infallible, it cannot also be intelligent.
-- A.Turing
Avatar użytkownika
kinio
Homos antropiczny
Homos antropiczny
 
Posty: 67
Dołączył(a): poniedziałek, 14 lipca 2008, 08:51
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Plik video jako tapeta pulpitu

Nowy postprzez Cyfrowy Baron » piÄ…tek, 19 wrzeÅ›nia 2008, 08:48

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ć.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Plik video jako tapeta pulpitu

Nowy postprzez kinio » piÄ…tek, 19 wrzeÅ›nia 2008, 12:55

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.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
If a machine is expected to be infallible, it cannot also be intelligent.
-- A.Turing
Avatar użytkownika
kinio
Homos antropiczny
Homos antropiczny
 
Posty: 67
Dołączył(a): poniedziałek, 14 lipca 2008, 08:51
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 0 gości