Delphi-PRAXiS
Seite 6 von 7   « Erste     456 7      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Probleme mit Bass_Vis (https://www.delphipraxis.net/72711-probleme-mit-bass_vis.html)

BassFan 14. Jul 2006 12:06

Re: Probleme mit Bass_Vis
 
Handle der DLL finden?

Finde das Handle von den Plugin's nicht.
Was bekannt ist, ist das ParentWindow

Hwnd
ClassenName = ('Winamp v1.x')
Titel (Caption)

Wie kann ich nun das Handle der DLL ermitteln?
ich meine nicht das Handle des Moduls sondern des Fensters.

GetWindow,FindWindow,FindWindowEx alles will nicht funktionieren.

Grüße

turboPASCAL 14. Jul 2006 18:17

Re: Probleme mit Bass_Vis
 
Hm, das Problem ist das jeder ein Winamp Vis Fenster erstellen kann wie er will, das heisst es ist nichts festgelegt. Damit sind die Fenstersuchfunktionen wie FindWindow etc. ggf. ervfolglos.

BassFan 14. Jul 2006 19:52

Re: Probleme mit Bass_Vis
 
Zitat:

Zitat von turboPASCAL
Hm, das Problem ist das jeder ein Winamp Vis Fenster erstellen kann wie er will, das heisst es ist nichts festgelegt. Damit sind die Fenstersuchfunktionen wie FindWindow etc. ggf. ervfolglos.

Nein
Das PluginHandle hat nichts mit erstellen von Fenstern zu tun.
Es soll lediglich dem user ermöglichen diverse Funktionen mit dem Handle asuzuführen.

Nicht alle Plugins unterstützen Docking.

Wenn ich das Handle kenne kann mein Player wenn er verschoben wird sich automatisch an das Plugin Window
andocken und es mitziehen.

So wie bei Winamp wenn die Playliste oder EQ andockt!

Eine andere Frage ? :wink:

Delphi-Quellcode:
function BASS_WINAMPVIS_SetChanInfo(handle: HVIS; Title: PChar; FileName: PChar; pos, len: DWORD): boolean; stdcall;
Hier werden Diverse Infos übermittelt.
Den Titel , Filename muss ich wenn er ankommt über SendMessage an die Winproc senden.

Delphi-Quellcode:
PostMessage(handle,WM_WA_IPC,VisInfo^.Title,IPC_GETPLAYLISTTITLE)
Hier stimmt was nicht es wird ein Integer als übergabe verlangt.

Wie kann ich den Text 'VisInfo^.Title' senden als Integer das er trotzdem richtig ausgewertet wird.

Grüße

BassFan 14. Jul 2006 23:05

Re: Probleme mit Bass_Vis
 
Zitat:

Hier stimmt was nicht es wird ein Integer als übergabe verlangt.
Hat sich erledigt!

gruß

BassFan 15. Jul 2006 09:52

Re: Probleme mit Bass_Vis
 
Liste der Anhänge anzeigen (Anzahl: 1)
Soweit läuft jetzt alles!

Siehe ScreenShot.

Einzige Problem ist das Dummy Window von Winamp.
Ich habe es mal auf Visible gestellt damit man da problem besser erkennen kann.

Wenn nun ein plugin ausgeführt wird hängt es sich an das Fenster an.
Das ist es aber was ich verhindern will .. es soll wie bei Winamp sich an mein fenster andocken.

Hier nochmal ein Schnipsel vom Source.

Delphi-Quellcode:
  // Erst wenn die Classe registriert ist kann das Window erstellt werden
  WinAtom := Windows.RegisterClassEx(wClass);

  if WinAtom <> 0 then
    Result := CreateWindowEx(0, AppClass, AppTitle,
      WS_VISIBLE,      // Kein Frame, Unsichtbar
      0, 0, 275, 116, // x, y, width, height
      {parent} 0, 0, hInst, nil)
  else
    Result := 0;

     // AppParentHandle Hwnd von der ausführenden Anwendung
//   if AppParentHandle <> 0 then
//   begin
//   VisPlgHandle := Result;
//   SetParent(VisPlgHandle, AppParentHandle);
//   SetWindowPos(VisPlgHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE);
//   end
//   else

//  VisPlgHandle := Result;

  VisInfo^.WinHandle := VisPlgHandle;
  WinampVisExecute(Filename, Vismod, VismodCounter, VisPlgHandle);

  // ParentWindow der APPClass zuweisen
  VisInfo^.VisModule^.hwndParent := VisPlgHandle;
  VisInfo^.VisModule^.Init(VisInfo^.VisModule);
  PluginHandle := GetWindow(VisInfo^.VisModule^.hwndParent, GW_HWNDPREV);
Wenn die zeilen oben auskommentiert werden dann hängt sich das Programm auf..
bzw. verliert den Focus und läuft nicht weiter.

Was kann ich da sonst noch machen habs mit zwei WinProcs versucht und.. und.. und..
Weiss im moment nicht weiter.

turboPASCAL 15. Jul 2006 11:51

Re: Probleme mit Bass_Vis
 
:gruebel: Wie gesagt, du weist ja nicht wie der Programierer das Plugin gebaut hat. Ob es sich um eine Form wie in Delphi, VB etc. als Standalone, Dialog etc. dich darstellt.
Desswegen wird es auch schwehr mit FindWindow das Handle zu finden und sich dan die WndProc zu holen und oder umzubigen.


Du kontest aber versuchen das Pluginfenster auf dein Fenster zu kleben...

BassFan 15. Jul 2006 12:12

Re: Probleme mit Bass_Vis
 
Zitat:

Zitat von turboPASCAL
:gruebel: Wie gesagt, du weist ja nicht wie der Programierer das Plugin gebaut hat. Ob es sich um eine Form wie in Delphi, VB etc. als Standalone, Dialog etc. dich darstellt.
Desswegen wird es auch schwehr mit FindWindow das Handle zu finden und sich dan die WndProc zu holen und oder umzubigen.


Du kontest aber versuchen das Pluginfenster auf dein Fenster zu kleben...

Es gibt ja nur 2 möglichkeiten
entweder ich bekomme das HWND über
Delphi-Quellcode:
PluginHandle := GetWindow(VisInfo^.VisModule^.hwndParent, GW_HWNDPREV);
oder es wird ein wert 0 zurückgegeben.

In 90% aller fälle ist das handle vorhanden.
Die anderen 10 sind meistens plugins welche sich selbst andocken.
Mein problem ist das hier erstellte 'Winamp v1.x' in das Window meiner Anwendung einzufügen.
Das Handle ist immer bekannt da es ja im Thread selbst erstellt wird.

Nur es verliert den Focus sobald ich es in meine Form verschiebe.
dann läuft die routine nicht mehr durch weil sich die reihenfolge kindfenster,Parentfenster,Child-fenster
geändert hat.

wenn alle stricke reißen werd ich es wohl mit GetwindowRec machen müssen.
Nur das ist extrem CPU lastig da es mein Window immer verfolgen muss
sobald es verschoben wird.

grüße

BassFan 16. Jul 2006 11:08

Re: Probleme mit Bass_Vis
 
[quote]Desswegen wird es auch schwehr mit FindWindow das Handle zu finden und sich dan die WndProc zu holen und oder umzubigen. [delphi]

wir reden irgendwie aneinander vorbei. :(
Das Handle finde ich immer. Notfalls Enumeriere ich alle Fenster und vergleiche sie über ein vorher angelegtes array
in dem sich alle Window Handle befinden.

Wie kann ich die Kontrolle über das von mir erstellte
Fenster zurückbekommen sobald dieses als ParentWindow in
das Anwendungs Fenster verschoben wurde.

grüße

BassFan 16. Jul 2006 14:11

Re: Probleme mit Bass_Vis
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da niemand antwortet.

Zitat:

Wie kann ich die Kontrolle über das von mir erstellte
Fenster zurückbekommen sobald dieses als ParentWindow in
das Anwendungs Fenster verschoben wurde.
beantworte ich es selber!

Hat sich erledigt es geht.
Schaut auf das kleine Visualisierungs Window unter der Zeitanzeige :wink:

BassFan 16. Jul 2006 16:17

Re: Probleme mit Bass_Vis
 
Liste der Anhänge anzeigen (Anzahl: 1)
So hier ist das Projekt mit Quelltext der Exe
welche die Bass_Vis als visualisierung für Winamp Plugins bis 2.9 verwendet.

Habe einen exeption-Handler mit eingebaut.
Ihr könnt aber auch Fehler hier melden wenn ihr wollt.
Oder Fragen stellen bzgl. PlayStatus, Text anzeige usw....

gruß

EDIT: Ihr müßt eine Quelle starten welche Musk wiedergibt ansonsten wird nix angezeigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Seite 6 von 7   « Erste     456 7      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz