FindWindow() von WMP der in Hintergrund spielt !!!
Hallo,
wie kann man den Klassennamen eine versteckte Anwendung finden? Ich habe versucht den Classname von Windows Media Player, der beim Spielen ausgeblenden st, zu finden, leider Ohne Erfolg. mit dem Code kann ich den Klassennamen von WMP auslesen aber nur wenn er nicht in Hintergrund spielt:
Delphi-Quellcode:
Der Windows Media Player spielt in Webbrowser in Hintergrund
procedure TForm1.Button6Click(Sender: TObject);
var h: HWND; text,classname:String; begin h:=FindWindow(nil,'Windows Media Player'); //h:=GetForegroundWindow; SetLength(text,SendMessage(h,WM_GETTEXTLENGTH,0,0)+1); SendMessage(h,WM_GETTEXT,length(text),Integer(@text[1])); SetLength(ClassName, 255); //get the class name and reset the //memory area to the size of the name SetLength(ClassName, GetClassName(h, PChar(className), Length(className))); edit1.Text:=classname; edit2.Text:=text; end; Der html Code in Webbrowser ist so geschrieben:
Code:
Wie kann man die Windows (Klassennamen) von WMP wenn er so versteckt finden?
<body>
[img]test.avi[/img]</p> </body> </html> Gruß ------------- |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
entweder du downloadest x-spy (ein prog mit dem du von Programmen das Handle rausbekommst) oder du benutzt eben diese function^^
Delphi-Quellcode:
dann musste nur noch hinschreiben (auf deinen code bezogen)
function GetWMPHandle : hwnd;
287 begin 288 result := FindWindow('WMPlayerApp', nil); 289 result := FindWindowEx(result, 0, 'WMPAppHost', 'WMPAppHost'); 290 if result = 0 then result := Findwindow(nil,'Windows Media Player'); 291 end;
Delphi-Quellcode:
ungetestet aba sollte gehn... wie gesagt mit x-spy kriegste eine besseren handle und sparst di diese ganze funktion^^
h:=GetWMPHandle;
EDIT: ups^^ das mit dem webrowsern hab ich überlesen... aba da müsstest du dann erst deinen webbrowser ansprechen und dann dein WMP glaub ich mal |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Hallo,
mir ist lieber einen Code. Ich habe die Funktion verwendet, bleibt leider der versteckte Windows Media Player immer unendeckt! Gruß ____________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Hast Du Dir schon einmal Gedanken darüber gemacht, dass der verwendete MediaPlayer in diesem Fall ein Browser-Plugin sein könnte?
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
Und wenn es ein Browser Plug-In wäre, heißt das vergeblich ? Gruß |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Sorry, da muss ich passen, nicht meine Materie.
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
ich habe diese Information mit Hilfe von WinSpay : [Edit]Siehe Anhang[/Edit] So habe ich so versucht :
Delphi-Quellcode:
Woran liegt das Problem?!const {Windows Media Player API} ... WMP_MEDIA_PLAY_PAUSE = $E0000; procedure TForm1.Button1Click(Sender: TObject); var myHandle:HWND; begin //myHandle := 331038; //myHandle := FindWindow(nil, 'ActiveMovieWindow'); // über seinen Titel finden //myHandle := FindWindow('VideoRenderer', 'ActiveMovieWindow'); // über seinen Klassennamen finden //myHandle := FindWindow('WMPlayerApp', 'Windows Media Player'); // über seinen Classname finden if myHandle <> 0 then Sendmessage(myHandle, WM_APPCOMMAND, 0, WMP_MEDIA_STOP) else ShowMessage('Nicht gefunden'); end; end. Gruß ------------------- _________________________ [edit=SirThornberry] Mfg, SirThornberry[/edit] |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Das Handle per WinSpector or X-Spy oder whatever raussuchen bringt dir nix da es sich jedesmal eh ändert.
Was du brauchst ist Titel oder noch besser den Namen der Fenster Klasse des Players (oder beides). Damit kannst du das Fenster finden und eventuell steuern. Die Frage ist jedoch welches Fenster das richtige ist (kann auch das parent fenster von dem was du ausgewählt hast sein) und ob es sich mit den selben Nachrichten wie das WMP Fenster Steuern läßt. Am besten mal Onkel Google befragen... |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Hi,
der Windows Media Player spielt in Webseite in Hintergrund (Vielleicht als Plug-In). HTML-Code :
Delphi-Quellcode:
Wie kann ich den Titel oder den Classname rausfinden?
<html>
<head> <title>Test</title> </head> <body> [img]test.avi[/img] </body> </html> Der Onkel Google hilft aber nicht viel :mrgreen:. Hier ist alles, alles was er mir geschenckt hat :
Delphi-Quellcode:
function TVideoWindow.GetVideoHandle: THandle;
begin if FVideoWindow <> nil then result := FindWindowEx(Parent.Handle,0,Pchar('VideoRenderer'), Pchar(name)) else Result := Canvas.Handle; end; Was muss ich tun, um einen Code zu generieren? es ist nicht möglich mit der Option "Unter der Maus" ! wie kann ich das Button Code klicken, ohne die Maus :mrgreen: Hier ist das Video(ein Video in HTML-Seite) zum Testen : Demo (Video) versteckt Gruß ___________________________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Winspy hat eine integrierte Funktion "Code generieren" - hast du die mal ausprobiert? Funktioniert das?
|
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] |
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. |
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:
Ich bekomme trotzdem "Nicht gefunden" !!!
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. Wo kann jetzt das Problem liegen ? ______________________ |
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 |
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:
// Delphi
HWND FindWindowEx(
HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow );
Delphi-Quellcode:
Es wird langsam komplizierter !
function FindWindowEx(hwndParent: HWND; hwndChildAfter: HWND; lpszClass:PChar; lpszWindow:PChar): HWND; stdcall;
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 ! ___ ____________ |
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. |
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:
Nachdem Klick auf das Button passiert nichts, d.h. das Windows hat der Code gefunden, das Video aber nicht. Oder?
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. Nun müssen wir die Funktion von Microsoft dazu in den Code einbauen :
Delphi-Quellcode:
Der Code oben ist wahrscheinlich in C Sprache !
HWND FindWindowEx(
HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow ); 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 __________ |
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. |
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. _________ |
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:
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Delphi-Quellcode:
sorry, aber das tut schon echt weh :wall:
wnd := FindWindowEx(wnd, 0, 'VideoRenderer', nil);
wnd := FindWindowEx(HwndParent, HwndChildAfter, lpszClass, lpszWindow); if wnd <> 0 then hast du überhaupt eine Ahnung was du eigentlich machst? :shock: naja whatever, du findest zwar die Fenster jetzt richtig, aber keines springt an die Fenster Nachricht an mit der sich der WMP Steuern läßt. D.h. entweder die lassen sich gar nicht per Nachricht steuern oder aber es ist eine andere Nachricht... |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
hi, hab jetzt das handle von einem Button rausgefunden, lässt sich aber nicht über BM_CLICK drücken.
Ich vermute es ist kein richtiger Button, also der sieht aus wie die Buttons von der Windows Bildschirmtastatur, kann mir einer sagen wie ich so einen Button anklicke. cu |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
Hast du geschaft das Video in der Webseite zu steuern? Mir ist eigentlich schwer den Child zu finden :| Gruß ____________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
ich freue mich, dass Du meine Thread wieder anschaust :drunken: Das Problem ist nicht einfach, da das Video in der Webseite nicht normal hinzugefügt sondern als Child Wenn das Video normal in der Webseite und nicht in Hintergrund ausgeblendet, dann ist einfach das Video zu Steuern : http://jkontherun.blogs.com/photos/u...orized/wmp.jpg So kann ich alle Buttons zugreigen. Gruß ____________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
sag mal bestitzt du die fähigkeit das was andere Leute schreiben zu LESEN und zu VERSTEHEN?
alles was du machst ist jedem der was postet dein Problem neu zu erklären in der Hoffnung das dir irgendwer fertigen source code postet. :wall: Zitat:
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Warum nicht. Ich beherrsche Delphi leider nicht.
Mansch mal treffe ich mit Probleme, die nicht für Anfänger einfach ist, dann poste ich mein Problem hier : http://www.delphipraxis.net/internal...t.php?p=266246 Dann habe ich den Code so geändert :
Delphi-Quellcode:
Ergebnis : Passiert nicts! d.h. Es wird was gefunden aber Was? const {Windows Media Player API} --- WMP_MEDIA_STOP = $D0000; WMP_MEDIA_PLAY_PAUSE = $E0000; procedure TForm1.Button4Click(Sender: TObject); var wnd : HWND; WndParent: HWND; WndChild: HWND; ClsNameChild: String; TitleChild: String; begin wndChild :=FindWindow('IEFrame','WMP - Microsoft Internet Explorer'); WndParent := Windows.GetParent(WndChild); SetLength(ClsNameChild, 1024); SetLength(ClsNameChild, GetClassName(WndChild, PChar(ClsNameChild), Length(ClsNameChild))); SetLength(TitleChild, 1024); SetLength(TitleChild, GetWindowText(WndChild, PChar(TitleChild), Length(TitleChild))); WndChild := FindWindowEx(WndParent, 0, PChar(ClsNameChild), PChar(TitleChild)); // bis hier ist OK wnd:= FindWindow(PChar(ClsNameChild),PChar(TitleChild)); if Wnd <> 0 then Sendmessage(Wnd, WM_APPCOMMAND, 0, WMP_MEDIA_PLAY_PAUSE) //ShowMessage('gefunden') else ShowMessage('nicht gefunden'); end; Also das Ziel nicht getrofen :gruebel: --------- ___________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
Aber muss mich anderen anschließen ohne es böse zu meinen .. Frage? Kennst du dich überhaupt mit einer anderen sprache aus ? Man sollte schon grundkenntnisse haben wenn man mit API arbeiten will. Und sollte nicht vorraussetzen das andere für dich die Arbeit tun. So interpretiere ich deine Antwort! Warum nicht. gruss |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
Wenn du Delphi nicht beherrschst, warum willst du dann gleich mit sowas "komplexen" einsteigen? Ich denke das hier soll auch Teil deines "HTML in Exe-Verschlüsselungs-Programm" werden. Fang doch klein an? :gruebel: Dir sollte es inzwischen aufgefallen sein, dass Communities keine Selbstbedienungsläden sind, wo man hingeht, sich das nimmt was man will und braucht und wieder rausgeht. |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
@taktaky: Könntest du dir bitte angewöhnen Bilder anzuhängen? Es nutzt keinem etwas wenn du die Antwort auf deine Frage hast, die Bilder dann von deinem webspace löschst und niemand mehr etwas von deiner Frage hat weil die Bilder weg sind.
Daher packe diese bitte immer in den Anhang |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
ich wollte die Bilder hängen, leider ist jetzt nicht möglich (mehr als 34 h). Ich werde ab jetzt die Bilder hängen. Du hast Recht. Gruß ________ |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Danke :-D
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
kann es sein, dass solche "Buttons" (wie in vielen (Game-)Oberflächen) gar keine Buttons sind, sondern nur rein grafisch dargestellt werden? Dann würde es ja genügen, die Pixelposition bzw. Pixelbereich herauszufinden und da einen MouseClick zu simulieren. *mal so gedacht hab* :wink:
öhm.... das war wohl der falsche Thread..... Ich dachte, es ginge um ein anderes Programmfenster, war ja vom gleichen Autor, naja :-D |
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
|
Re: FindWindow() von WMP der in Hintergrund spielt !!!
Zitat:
Delphi-Quellcode:
Deswegen ist wahrscheinlich unmöglich es zu stoppen, sonst konnte einer einen Vorschlag gegeben hat :zwinker:
html
<body> [img]test.avi[/img]</p> </body> </html> schon aufgegeben (mindestens in diesem Forum :mrgreen: ) <> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr. |
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