Windows per STOP Taste schliessen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo Leute,
möchte per STOP Taste im WMP das Fenster schliessen!

Code: Alles auswählen

; Mediaplayer mit Stop schliessen!
MediaString$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.MP4;*.asf;*.mp3;*.wav;*.flv;*.mid|All Files|*.*", 0)
Procedure PRESENT_MediaPlayerInsideExplorer(GGadget,MediaString.s,PlayerWidth,PlayerHeight)
  Protected tmedia.s
  tmedia = "<body topmargin=0 leftmargin=0 scroll='no'>"
  tmedia + "<object id='mediaplayer' classid='clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95' type='application/x-oleobject' width='"+PlayerWidth+"' height='"+ PlayerHeight +"'>"
  tmedia + "<param name='filename' value='"+MediaString+"'>"
  tmedia + "<param name='animationatstart' value='true'>"
  tmedia + "<param name='transparentatstart' value='true'>"
  tmedia + "<param name='autostart' value='true'>"
  tmedia + "<param name='showcontrols' value='true'>"
  tmedia + "<param name='ShowStatusBar' value='false'>"
  tmedia + "<param name='windowlessvideo' value='false'>"
  tmedia + "</object>"   
  SetGadgetItemText(GGadget, #PB_Web_HtmlCode , tmedia)
EndProcedure
wFlags = #PB_Window_ScreenCentered | #PB_Window_SystemMenu
OpenWindow(0, 0, 0,  667, 675, "Windows Media Player", wFlags)
WebGadget(1,0, 0, 667, 675,"")
PlayerWidth= 667
PlayerHeight= 675
PRESENT_MediaPlayerInsideExplorer(1,MediaString$,PlayerWidth,PlayerHeight)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Habe es schon mit den Constanten
#APPCOMMAND_MEDIA_NEXTTRACK
#APPCOMMAND_MEDIA_PREVIOUSTRACK
#APPCOMMAND_MEDIA_STOP
#APPCOMMAND_MEDIA_PLAY_PAUSE
versucht, bekomme jedoch kein Ereigniss!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo Leute,
kann mir jemand sagen wie man den Player auslesen kann, wenn das Video zu ende ist um ein Signal zum umschalten zu haben!

Code: Alles auswählen

Global Player.IWebBrowser2

Procedure PRESENT_MediaPlayerInsideExplorer(GGadget,MediaString.s,PlayerWidth,PlayerHeight)
  Protected tmedia.s
  tmedia = "<body topmargin=0 leftmargin=0 scroll='no'>"
  tmedia + "<OBJECT id=Player height='"+PlayerHeight+"' width='"+PlayerWidth+"' classid=clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95>" 
  tmedia + "<param name='filename' value='"+MediaString+"'>"
  tmedia + "<param name='animationatstart' value='true'>"
  tmedia + "<param name='transparentatstart' value='true'>"
  tmedia + "<param name='autostart' value='true'>"
  tmedia + "<param name='showcontrols' value='true'>"
  tmedia + "<param name='ShowStatusBar' value='false'>"
  tmedia + "<param name='windowlessvideo' value='false'>"
  tmedia + "</object>"   
  SetGadgetItemText(0, #PB_Web_HtmlCode , tmedia)
EndProcedure

MediaString$ = "Z:\Movies\Andreas Kümmert - Heart Of Stone.mp4"  ; <======= Hier File einsetzen!
PlayerWidth= 600
PlayerHeight= 600

If OpenWindow(0, 0, 0, PlayerWidth, PlayerHeight, "WebBRowser Media Busy Check",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
    TextGadget(1, 10, 570, 100, 20, "", #PB_Text_Border)
    
    WebGadget(0, 10, 10, 580, 555, "")
    
    PRESENT_MediaPlayerInsideExplorer(0,MediaString$,PlayerWidth,PlayerHeight)
    
    Player.IWebBrowser2 = GetWindowLong_(GadgetID(0), #GWL_USERDATA)
    
    If Player.IWebBrowser2
      Player.IWebBrowser2\put_Silent(#True)
    Else
      Player.IWebBrowser2\put_Silent(#False)
    EndIf
    
    Repeat
      Event = WindowEvent()
      
      Player\get_Busy(@IsBusy.l)
      Debug Player\get_Busy(@IsBusy.l)
      If IsBusy
        SetGadgetText(1, "busy!")
      Else
        SetGadgetText(1, "not busy")
      EndIf
      
      If Event = 0
        Delay(1)
      EndIf
      
    Until WaitWindowEvent()=#PB_Event_CloseWindow  
    
  EndIf
EndIf
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows per STOP Taste schliessen

Beitrag von Kiffi »

ist das der Windows Media Player, den Du da in den Browser lädst?

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo Kiffi,
"Ja"
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows per STOP Taste schliessen

Beitrag von Kiffi »

gibt es einen besonderen Grund, warum Du das Control im Browser ausführst? Du könntest es auch direkt in einem PB-Window platzieren. Das würde die Bedienung ein wenig vereinfachen.

Hier mal ein kleines Beispiel:

Code: Alles auswählen

EnableExplicit

Global MediaPlayer.COMateObject
Global Quit

Procedure PlayStateChangeEvent(object.COMateObject, eventName.s, parameterCount)
  
  If MediaPlayer\GetIntegerProperty("PlayState") = 0
    Quit = #True
  EndIf
  
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "MediaPlayer", #PB_Window_SystemMenu)

MediaPlayer = COMate_CreateActiveXControl(10, 10, 620, 400, "MediaPlayer.MediaPlayer.1")

If MediaPlayer
  
  MediaPlayer\Invoke("Open('[DeineMediaDatei]')")
  
  MediaPlayer\SetEventHandler("PlayStateChange", @PlayStateChangeEvent()) ; jeder Mal, wenn sich der PlayState ändert,
                                                                          ; wird die PlayStateChangeEvent() aufgerufen
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = #True
    EndSelect
  Until Quit = #True
  
  MediaPlayer\Release()
  
EndIf
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo Kiffi,

vorab DANKE für deinen Vorschlag! Zu deiner Frage, nicht Unbedingt!

Bei der jetztigen Lösung habe ich keine Ahnung wie ich die Sache in ein Gadget(Imagegadget) bekomme?
Vielleicht noch einen Tip.

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows per STOP Taste schliessen

Beitrag von Kiffi »

vielleicht so:

Code: Alles auswählen

OpenWindow(...
ContainerGadget(...
MediaPlayer = COMate_CreateActiveXControl(...
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo Kiffi,

Danke, ... werde die Sache morgen mal Austesten!
In ein ImageGadget nehme ich an, geht nicht!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows per STOP Taste schliessen

Beitrag von Kiffi »

Velindos hat geschrieben:In ein ImageGadget nehme ich an, geht nicht!
nicht, dass ich wüsste. Da muss IMO schon ein Container sein.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Windows per STOP Taste schliessen

Beitrag von Velindos »

Hallo,
gibt es einen besonderen Grund, warum Du das Control im Browser ausführst?
ja, habe festgestellt das ich mit dem Player nicht im Programm zu recht komme, da ich die Sachen oft aus dem Webgadget starte!

Nun beim Beispiel mit dem WEBGADGET würde mich interessieren wie ich zum OBJECT 'Player' komme. Habe im Forum gestöbert aber keine Antwort gefunden, vielleicht kann mir jemand helfen!

Code: Alles auswählen

;http://www.purebasic.fr/english/viewtopic.php?f=13&t=45868
Global Player.IWebBrowser2
Global MediaString$ = "Z:\Movies\Andreas Kümmert - Heart Of Stone.mp4"  ; <======= Hier File einsetzen!
Global PlayerWidth= 600
Global PlayerHeight= 600

Procedure PRESENT_MediaPlayerInsideExplorer(GGadget,MediaString.s,PlayerWidth,PlayerHeight)
  Protected tmedia.s
  tmedia = "<html>"
  tmedia = "<body topmargin=0 leftmargin=0 scroll='no'>"
  
  tmedia + "<OBJECT id='Player' height='"+PlayerHeight+"' width='"+PlayerWidth+"' classid=clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95>"
  
  ; Wie kann ich das OBEJCT 'Player' einbinden "*Player.IWebBrowser2 = MyGetWindowLong(Player, #GWL_USERDATA)" und Abfragen auf  zb. STOP
  
  tmedia + "<param name='filename' value='"+MediaString+"'>"
  tmedia + "<param name='animationatstart' value='true'>"
  tmedia + "<param name='transparentatstart' value='true'>"
  tmedia + "<param name='autostart' value='true'>"
  tmedia + "<param name='showcontrols' value='true'>"
  tmedia + "<param name='ShowStatusBar' value='false'>"
  tmedia + "<param name='windowlessvideo' value='false'>"
  tmedia + "</object>"   
  tmedia + "</body>"   
  tmedia + "</html>"   
  SetGadgetItemText(GGadget, #PB_Web_HtmlCode , tmedia)
EndProcedure

Import "user32.lib"
  MyGetWindowLong(hwnd.i, index.i) As "_GetWindowLongA"
EndImport

If OpenWindow(0, 0, 0, PlayerWidth, PlayerHeight, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(0, 0, 0, PlayerWidth, PlayerHeight, "");"http://www.purebasic.com"
  PRESENT_MediaPlayerInsideExplorer(0,MediaString$,PlayerWidth,PlayerHeight)
  
  ; //////////////////////////////////////////////////////////////////////
  *iwbb2.IWebBrowser2 = MyGetWindowLong(GadgetID(0), #GWL_USERDATA)
  
  With *iwbb2
    \get_width(@width.l)
    \get_height(@height.l)
    \get_silent(@Silent.l)
  EndWith
  Debug width
  Debug height
  Debug Silent
  ;//////////////////////////////////////////////////////////////////////
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten