Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FindWindow() von WMP der in Hintergrund spielt !!! (https://www.delphipraxis.net/100061-findwindow-von-wmp-der-hintergrund-spielt.html)

taktaky 22. Sep 2007 16:43

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
WinSpay kann das Fenster von WMP finden, wenn ich die Option "Unter der Maus verwende"
Um einen Code zu generieren muss ich halt auf das Icon klicke. Das geht aber nicht, weil wenn ich den Cursor weg von dem Video bewege, dann bekomme ich was anderes !

Es gibt leider keine Tasten Kombination um den Befehl zu bestätigen

Was muss ich tun, um einen Code zu generieren?

[Edit]Bild - Siehe Anhang[/Edit]

Hier ist das Video(ein Video in HTML-Seite) zum Testen :
Demo (Video) versteckt



--------

[edit=SirThornberry]Bild in Anhang gepackt - Mfg, SirThornberry[/edit]

Nuclear-Ping 23. Sep 2007 01:11

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Ähh, auf den "Code" Button klicken, den du eingerahmt hast? :wall:

Dass das nicht geht, wenn du "Unter der Maus" aktiv hast, ist ja wohl klar. Wie wärs, wenn du stattdessen den dicken Button "Fenster auswählen" nimmst und das WMP-Fenster im Browser damit auswählst?

Und selbst wenn du einen Code für dieses Handle generierst, wird der wahrscheinlich auch nur mit FindWindow bzw. FindWindowEx arbeiten.

Achso, als Nachtrag: Ich finde du nervst! Such doch mal selber nach Lösungen, statt wegen jedem sch... "Problemchenchenchen" was du hast das Forum zuzuspammen. Zu dem Thema inzwischen schon drei Threads.

taktaky 23. Sep 2007 11:14

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Hallo,

vorher habe ich einfach auf das Button angeklickt, muss man klicken und ziehen :mrgreen:

Danke!

Mit Hilfe von dem Programm WinSpy lautet der Code nun so:
Delphi-Quellcode:
const
{Windows Media Player API}
...
WMP_MEDIA_PLAY_PAUSE   = $E0000;

procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('TMainForm','Test');
  wnd := FindWindowEx(wnd, 0, 'TPanel', nil);
  wnd := FindWindowEx(wnd, 0, 'Shell Embedding', nil);
  wnd := FindWindowEx(wnd, 0, 'Shell DocObject View', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_Server', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_ActiveMovie', nil);
  wnd := FindWindowEx(wnd, 0, 'VideoRenderer', nil);
if wnd <> 0 then
  Sendmessage(wnd, WM_APPCOMMAND, 0, WMP_MEDIA_PLAY_PAUSE)// umd das Video anzuhalten

  else
  ShowMessage('Nicht gefunden');

end;

end.
Ich bekomme trotzdem "Nicht gefunden" !!!

Wo kann jetzt das Problem liegen ?



______________________

Billi Berserker 23. Sep 2007 12:11

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
guck dir deinen code vielleicht mal an und lies dir http://msdn2.microsoft.com/en-us/library/ms633500.aspx durch
dann würdest du feststellen das da einiges nicht stimmen kann.

Es sei denn der Internet Explorer und das Video ist auf einmal ein child Fenster von deiner Anwendung

taktaky 23. Sep 2007 13:54

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Der Code oben, habe ich mit WinSpay generiert
wo muss ich die Funktion von Microsoft dazu einbauen ?
C//
Delphi-Quellcode:
HWND FindWindowEx(     
    HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow
);
// Delphi
Delphi-Quellcode:
function FindWindowEx(hwndParent: HWND; hwndChildAfter: HWND; lpszClass:PChar; lpszWindow:PChar): HWND; stdcall;
Es wird langsam komplizierter !

Das Video ist wahrscheinlich als Child in IE eingebaut.

und so habe ich die Funktion von Microsoft vor

Delphi-Quellcode:
 


wnd := FindWindowEx(HwndParent, HwndChildAfter, lpszClass, lpszWindow);

Es Wird das Fenster nicht gefunden !



___



____________

Billi Berserker 23. Sep 2007 14:16

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Das ist toll das du den Code mit WinSpy generiert hast, aber vielleicht schaust du ihn dir mal an und versuchst ihn zu verstehen. Dann würde dir auffallen das schon in der ersten Zeile etwas nicht stimmen kann...

Wenn der Film nämlich im Internet Explorer abgespielt wird, was bringt es dann wenn er nach einem Fenster mit Klassennamen TMainForm sucht und dann anfängt die child Fenster mit TPanel,etc. durchzugehen? Das gehört mit großer Sicherheit nicht zum Internet Explorer.

Du hast sogar schon einen Screenshot gepostet in dem die ganze Fenster Struktur des vermeindlichen Player Fenster gepostet ist. Fang bei einem der Fenster mit FindWindow an und arbeite dich dann durch die child Fenster mit FindWindowEx durch. Alles was du brauchst ist in dem WinSpy Screenshot zu sehen den du gepostet hast.

taktaky 23. Sep 2007 15:00

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Das war ein anderes Beispiel und nicht über das Video in der Webseite.

OK wir kommen zu dem Beispiel in der Webseite :

das ist der Code mit Hilfe von Winspy :
Delphi-Quellcode:
const
{Windows Media Player API}
...
WMP_MEDIA_PLAY_PAUSE   = $E0000;
WMP_MEDIA_STOP         = $D0000;
...

procedure TForm1.Button3Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('IEFrame','WMP - Microsoft Internet Explorer');
  wnd := FindWindowEx(wnd, 0, 'Shell DocObject View', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_Server', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_ActiveMovie', nil);
  wnd := FindWindowEx(wnd, 0, 'VideoRenderer', nil);
  if wnd <> 0 then
    Sendmessage(wnd, WM_APPCOMMAND, 0, WMP_MEDIA_PLAY_PAUSE)
    else
    ShowMessage('nicht gefunden');
  end;
end.
Nachdem Klick auf das Button passiert nichts, d.h. das Windows hat der Code gefunden, das Video aber nicht. Oder?

Nun müssen wir die Funktion von Microsoft dazu in den Code einbauen :
Delphi-Quellcode:
HWND FindWindowEx(     
    HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow
);
Der Code oben ist wahrscheinlich in C Sprache !


Das Video ist als Child eingebaut, deswegen müssen wir die Funktion
oben verwenden.


Ich weiß aber nicht wie und wo die Funktion einbauen muss?!


Demo
__________

Billi Berserker 23. Sep 2007 16:12

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Dann hat er das richtige Fenster schonmal gafunden.
Nur schluckt das Fenster die Nachrichten nicht. Läßt sich dann wahrscheinlich nicht mit den gleichen Nachrichten wie der WMP Steuern, oder aber es ist das falsche Fenster.
Du kannst mal versuchen die Nachricht noch an eines der anderen Fenster zu schicken, also einfach die unterste FindWindowEx Zeile raus nehmen und nochmal testen... dann die nächste raus nehmen und testen..., usw. bis du beim top window angekommen bist.
Vielleicht verarbeitet eines dieser Fenster die Nachricht.

taktaky 23. Sep 2007 16:39

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Wenn ich die Zeillen von unten nach oben Stück Stück lösche, dann wird das Fenster immer gefunden

wenn ich aber die Funktion von Microsoft dazu als letzte Zeille einbaue, dann wird das Fenster nicht gefunden

Delphi-Quellcode:
...
  const
...
WMP_MEDIA_STOP         = $D0000;
WMP_MEDIA_PLAY_PAUSE   = $E0000;

procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
  HwndParent: HWND;
  HwndChildAfter: HWND;
  lpszClass: PChar;       // pointer to class name
  lpszWindow: PChar;       // pointer to window name

begin
  wnd := FindWindow('IEFrame','WMP - Microsoft Internet Explorer');
  wnd := FindWindowEx(wnd, 0, 'Shell DocObject View', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_Server', nil);
  wnd := FindWindowEx(wnd, 0, 'Internet Explorer_ActiveMovie', nil);
  wnd := FindWindowEx(wnd, 0, 'VideoRenderer', nil);
  wnd := FindWindowEx(HwndParent, HwndChildAfter, lpszClass, lpszWindow);
  if wnd <> 0 then
    Sendmessage(wnd, WM_APPCOMMAND, 0, WMP_MEDIA_PLAY_PAUSE)
    else
    ShowMessage('nicht gefunden');
  end;
end.


_________

Nuclear-Ping 23. Sep 2007 20:54

Re: FindWindow() von WMP der in Hintergrund spielt !!!
 
Und nun warteste darauf, dass dir jemand wieder nen Source-Code gibt, weil du mal wieder keinen Schimmer von Variablendeklaration, -definition und deren Inhalte hast? :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
Seite 2 von 4     12 34      

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