nativityplay82 Posted June 4, 2007 Share Posted June 4, 2007 Hallo Leute, jetzt habe ich schon lange gesucht aber nichts passendes für mein Problem gefunden - weder dieses Forum noch *oo***. Im Grunde will ich, wie beim Girder-Plugin folgendes mit EventGhost lösen, da EG stabiler läuft und keine Kosten verursacht: Ich möchte eine Modus-anhängige Belegung der Tasten erreichen. D.h. z.B. sollen die Farbtasten der FB im OSD-Menü selbigen entsprechen. Im Non-Menü-Mode möchte ich damit z.B. den Teletext aufrufen. Bräuchte also irgendeine Rückmeldung vom DVBViewer in welchem Modus er sich befindet. Ich habe schon versucht beim Drücken der Menü Taste die Belegung innerhalb von EG zu ändern, das funktioniert aber nicht zuverlässig. Vorab vielen lieben Dank für Eure Antworten. Quote Link to comment
Lars_MQ Posted June 4, 2007 Share Posted June 4, 2007 nimm dir mal aus der membersarea das DVBViewer spy teil. Da siehst Du welche events Du abgreifen kannst, daraus machst Du ein plugin für eventghost und schon hast Du was Du brauchst. So hab ich das auch mit dem girderteil gemacht... Quote Link to comment
nativityplay82 Posted June 4, 2007 Author Share Posted June 4, 2007 Vielen Dank für die schnelle Antwort, doch leider habe ich keinen Plan wie man mit Phyton programmiert. Scheint also keine Dummy-Lösung für das Problem zu geben. Quote Link to comment
Moses Posted June 4, 2007 Share Posted June 4, 2007 theoretisch solltest du zumindest das DVBViewer COM Interface mit so ziemlich jeder Programmiersprache ansprechen können... Wie Eventghost das handelt, weiß ich nicht.. wenn das nur python scripte ausführen kann, ist das etwas mager, aber wenn's da auch eine Plugin-Schnittstelle für echte *.dlls gibt, dann geht da auch jede Sprache. Quote Link to comment
nativityplay82 Posted June 5, 2007 Author Share Posted June 5, 2007 So wie ich das sehe sind alle EG Plugins als Python Scripte realisiert. Prinzipiell würde ich aber nur eine Kombi aus zwei bestehenden Plugins benötigen. 1) Das DVBViewer Plugin (sendet momentan Befehle an den DVBViewer via COM) --> Müsste man also "rumdrehen" 2) Das Task create/switch Events Plugin (erzeugt Ereignisse für EG) Quote Link to comment
klausb Posted June 6, 2007 Share Posted June 6, 2007 Anderer Vorschlag: Ich habe auch erst mit Girder und Stati rumgebastelt - finde ich aber unpraktisch. Meine funktionierende Lösung sieht so aus: - Bau dir ein eigenes Kommando (in Girder: einen Eintrag in dvbiewer.ini in girder32\plugins mit einem Wert ab $00005000) - Leg deine FB-Taste auf dieses neue Kommando - in DVBViewer\Scripts leg ein Command.vbs an und macht die Kontext-Analyse dort mit den DVBViewer-Bordmitteln (z.B. DVBViewer.WindowManager.ActiveWindowID oder DVBViewer.isMediaplayback). D.h man checkt die eingehende Command-ID und aktiviert dann mit DVBViewer.SendCommand das eigentliche (kontextabhängige) DVBV Kommando. So eine Art grosses if-else bzw. switch/case Statement Läuft bei mir zuverlässig. Für EventGhost müsste man nur ein paar Zeilen in __init__.py hinzufügen. Also z.B. ("MyNewCommand", "MyNewCommand", 20480), Der Rest ist EG/Girder-unabhängig. Gruss, klaus. Quote Link to comment
nativityplay82 Posted June 8, 2007 Author Share Posted June 8, 2007 Das ist der aktuelle Stand: Ich denke soweit bin ich nicht weg. Problem: Das funktioniert nicht: self.DVBViewer = DispatchWithEvents("DVBViewerServer.DVBViewer", self.DVBHandler) self.DVBEvents = self.DVBViewer.events [...] def DVBEvents_OnChannelChange(ChannelNr): self.TriggerEvent(ChannelNr) import eg class PluginInfo(eg.PluginInfo): name = "DVBViewerEvents" version = "2.00" kind = "program" description = ( 'Adds support functions to control DVBViewer Pro/GE' '\n\n<p><a href="http://www.DVBViewer.com/">DVBViewer Homepage</a>' ) icon = ( "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADK0lEQVR42j2TXWgcVRTH" "f/fOzM5uNknJxvoRt6kaCwlBjFJRsIgasUFLH1KFCqIIBTHUh9aCRQTRPviSokiLFREh" "iCXRh5ZiH6TWj1KxUqG2xmKwSlsrtKFu0/2a2Ttzr2d2jXMZLveee875n//5H5XWz6C7" "RsAkoBU4D2qX5RyBys50vp4bIQjBJp07P0/z2Guo+pGts0oXB12SSgAtFnFKY/lTnMpO" "qu3v/BxKS3CbZv5WezmdVs7OKTM/63SwEmctKk1wSYzqWYkq9uGCoty1cHEVV10UVGLL" "dclbI3sv8cIMKv7qbaOCknK1a+JUwhvbgOq9uZ01y71cgatfxf5xAvvXL6hCDzpfpPn3" "Yaean7/kqErEvjK58SnSS2exf/6IWxIewiL61lH80cdQXYJIVnpyjta3M3g3rcboc6jq" "9JjT9OLft5nk5EHSiz/j3/lg29ElEfb3H7CVSwQT2wkfmcIJP43pDbjLP2GHpdTrb/Q7" "nbsFe3VRspTIP7sXPXi3wCz9Rx+ScR/RJy8TbtpFOLETM/8lrY+fIh0eQNV2Dzn3T13g" "9otxB8nCMZIzh6G5hB4YJVy/E39sE+b0QZr7Jim+fgpdup1oz/2Yrqq08d3bnKsKu92r" "cDUh6so5/Hsm0eW1pAtHSOePkpt4hXDjNM0PnoBckcILnxF9NE6rcUoCvFd2RFpaZQXr" "ErnH3yRYt63DfAb/0HbM0XcobPseV7lA/MWrFHb8itn/JLGIUNXfX+VUrCSAKEzaWNhy" "XLJ0t/WgRW22sUhz95Cgeg5/ZCPxgRcJnzmAOfQ0JtdCNT4ccsoobBShewYIn/8a5YVY" "l7aV56LrxHuHpaQHUIPrpKQ5/LVbSb+ZwtxQRjVn7jUSQNlEZBxXCB7ehXfXZpa/5MQe" "zHdv4Y1MCkfZjIgqrUJHv9HK+4L+04ec8n1EDChnBXoL7471qNIa3JXTpOc7iAh7JcG1" "DjfyRncHmEbWhdlHZ5WrrrZkU9aOIi2stFWXDZcK+zpQRP/oYFncVvueTm3/fpHyuGRo" "YGVlk+dkZ+kiztQgv0IyleVOLNmEesH/3ZEAJPEK/gVNWWvcNcmGsgAAAABJRU5ErkJg" "gg==" ) CMDS = ( ("OSDMenu", "OSD-Menu", 111), ("OSDLeft", "OSD-Left", 2000), ("OSDRight", "OSD-Right", 2100), ("OSDUp", "OSD-Up", 78), ("OSDDown", "OSD-Down", 79), ("OSDOK", "OSD-OK", 73), ("OSDRed", "OSD-Red", 74), ("OSDGreen", "OSD-Green", 75), ("OSDYellow", "OSD-Yellow", 76), ("OSDBlue", "OSD-Blue", 77), ("OSDFirst", "OSD-First", 80), ("OSDLast", "OSD-Last", 81), ("OSDPrevious", "OSD-Previous", 82), ("OSDNext", "OSD-Next", 83), ("OSDClose", "OSD-Close", 84), ("OSDPositioning", "OSD-Positioning", 85), ("OSDClock", "OSD-Clock", 2010), ("OSDUndefined2", "OSD-Undefined2", 2110), ("OSDShowHTPC", "OSD-Show HTPC", 2110), ("OSDBackgroundToggle", "OSD-Background Toggle", 8194), ("OSDTeletext", "OSD-Teletext", 101), ("OSDShowTimer", "OSD-Show Timer", 8195), ("OSDShowRecordings", "OSD-Show Recordings", 8196), ("OSDShowNow", "OSD-Show Now", 8197), ("OSDShowEPG", "OSD-Show EPG", 8198), ("OSDShowChannels", "OSD-Show Channels", 8199), ("OSDShowFavourites", "OSD-Show Favourites", 8200), ("OSDShowTimeline", "OSD-Show Timeline", 8201), ("OSDShowPicture", "OSD-Show Picture", 8202), ("OSDShowMusic", "OSD-Show Music", 8203), ("OSDShowVideo", "OSD-Show Video", 8204), ("OSDShowNews", "OSD-Show News", 8205), ("OSDShowWeather", "OSD-Show Weather", 8206), ("OSDShowMiniepg", "OSD-Show Miniepg", 8207), ("OSDShowMusicPlaylist", "OSD-Show Music playlist", 8208), ("OSDShowVideoPlaylist", "OSD-Show Video playlist", 8209), ("OSDShowComputer", "OSD-Show Computer", 8210), ("OSDShowAlarms", "OSD-Show Alarms", 8212), ("Pause", "Pause", 0), ("OnTop", "On Top", 1), ("HideMenu", "Hide Menu", 2), ("ShowStatusbar", "Show Statusbar", 3), ("Toolbar", "Toolbar", 4), ("Fullscreen", "Fullscreen", 5), ("Exit", "Exit", 6), ("Channellist", "Channellist", 7), ("ChannelMinus", "Channel -", 8), ("ChannelPlus", "Channel +", 9), ("ChannelSave", "Channel Save", 10), ("Favourite1", "Favourite 1", 11), ("Favourite2", "Favourite 2", 12), ("Favourite3", "Favourite 3", 13), ("Favourite4", "Favourite 4", 14), ("Favourite5", "Favourite 5", 15), ("Favourite6", "Favourite 6", 16), ("Favourite7", "Favourite 7", 17), ("Favourite8", "Favourite 8", 18), ("Favourite9", "Favourite 9", 19), ("Favourite0", "Favourite 0", 38), ("FavouritePlus", "Favourite +", 20), ("FavouriteMinus", "Favourite -", 21), ("Aspect", "Aspect", 22), ("Zoom", "Zoom", 23), ("Options", "Options", 24), ("Mute", "Mute", 25), ("VolumeUp", "Volume Up", 26), ("VolumeDown", "Volume Down", 27), ("Display", "Display", 28), ("Zoom50", "Zoom 50%", 29), ("Zoom100", "Zoom 100%", 30), ("Zoom200", "Zoom 200%", 31), ("Desktop", "Desktop", 32), ("RecordSettings", "Record Settings", 33), ("Record", "Record", 34), ("Teletext", "Teletext", 35), ("EPG", "EPG", 37), ("Channel1", "Channel 1", 41), ("Channel2", "Channel 2", 42), ("Channel3", "Channel 3", 43), ("Channel4", "Channel 4", 44), ("Channel5", "Channel 5", 45), ("Channel6", "Channel 6", 46), ("Channel7", "Channel 7", 47), ("Channel8", "Channel 8", 48), ("Channel9", "Channel 9", 49), ("Channel0", "Channel 0", 40), ("TimeShift", "TimeShift", 50), ("TimeShiftWindow", "TimeShift Window", 51), ("TimeshiftStop", "Timeshift Stop", 52), ("RebuildGraph", "Rebuild Graph", 53), ("TitlebarHide", "Titlebar Hide", 54), ("BrightnessUp", "Brightness Up", 55), ("BrightnessDown", "Brightness Down", 56), ("SaturationUp", "Saturation Up", 57), ("SaturationDown", "Saturation Down", 58), ("ContrastUp", "Contrast Up", 59), ("ContrastDown", "Contrast Down", 60), ("HueUp", "Hue Up", 61), ("HueDown", "Hue Down", 62), ("LastChannel", "Last Channel", 63), ("Playlist", "Playlist", 64), ("PlaylistFirst", "Playlist First", 65), ("PlaylistNext", "Playlist Next", 66), ("PlaylistPrevious", "Playlist Previous", 67), ("PlaylistLast", "Playlist Last", 68), ("PlaylistStop", "Playlist Stop", 69), ("PlaylistRandom", "Playlist Random", 70), ("HideAll", "Hide All", 71), ("AudioChannel", "Audio Channel", 72), ("BestWidth", "Best Width", 89), ("Play", "Play", 92), ("OpenFile", "Open File", 94), ("StereoLeftRight", "Stereo/Left/Right", 95), ("JumpMinus10", "Jump Minus 10", 102), ("JumpPlus10", "Jump Plus 10", 103), ("ZoomUp", "Zoom Up", 104), ("ZoomDown", "Zoom Down", 105), ("StretchHUp", "StretchH Up", 106), ("StretchHDown", "StretchH Down", 107), ("StretchVUp", "StretchV Up", 108), ("StretchVDown", "StretchV Down", 109), ("StretchReset", "Stretch Reset", 110), ("Previous", "Previous", 112), ("Next", "Next", 113), ("Stop", "Stop", 114), ("ShowVideowindow", "Show Videowindow", 821), ("ToggleMosaicpreview", "Toggle Mosaicpreview", 8211), ("ShowHelp", "Show Help", 8213), ("HideVideowindow", "Hide Videowindow", 8214), ("Reboot", "Reboot", 12295), ("Shutdown", "Shutdown", 12296), ("ToggleBackground", "Toggle Background", 12297), ("EjectCD", "Eject CD", 12299), ("Forward", "Forward", 12304), ("Rewind", "Rewind", 12305), ("AddBookmark", "Add Bookmark", 12306), ("Hibernate", "Hibernate", 12323), ("Standby", "Standby", 12324), ("Slumbermode", "Slumbermode", 12325), ("CloseDVBViewer", "Close DVBViewer", 12326), ("SpeedUp", "Speed Up", 12382), ("SpeedDown", "Speed Down", 12383), ("ShowPlaylist", "Show Playlist", 12384), ("ShowVersion", "Show Version", 16384), ("DisableAudio", "Disable Audio", 16385), ("DisableAudioVideo", "Disable AudioVideo", 16386), ("DisableVideo", "Disable Video", 16387), ("EnableAudioVideo", "Enable AudioVideo", 16388), ("ZoomlevelStandard", "Zoomlevel Standard", 16389), ("Zoomlevel0", "Zoomlevel 0", 16390), ("Zoomlevel1", "Zoomlevel 1", 16391), ("Zoomlevel2", "Zoomlevel 2", 16392), ("Zoomlevel3", "Zoomlevel 3", 16393), ("ZoomlevelToggle", "Zoomlevel Toggle", 16394), ("TogglePreview", "Toggle Preview", 16395), ("RestoreDefaultColors", "Restore Default Colors", 16396), ("DVDMenu", "DVD Menu", 8246), ("ShutdownCard", "Shutdown Card", 12327), ("ShutdownMonitor", "Shutdown Monitor", 12328), ("StopGraph", "Stop Graph", 16383), #("Exit", "Exit", 12294), ) import wx import pythoncom from win32com.client import DispatchWithEvents, Dispatch from win32gui import SendMessageTimeout from win32con import SMTO_BLOCK, SMTO_ABORTIFHUNG class DVBViewer(eg.PluginClass): def __init__(self): self.AddAction(self.Start) self.DVBViewer = None for tmpName, tmpDescription, tmpValue in CMDS: class tmpAction(eg.ActionClass): name = tmpDescription value = tmpValue def __call__(self2): self.SendCommand(self2.value) tmpAction.__name__ = tmpName self.AddAction(tmpAction) #--------------------------------------------------------------------- #--------------------------------------------------------------------- class EventHandler: def __init__(self3): pass def DVBEvents_OnChannelChange(ChannelNr): self.TriggerEvent(ChannelNr) def OnDocumentComplete(self3, pDisp=pythoncom.Empty, URL=pythoncom.Empty): self.TriggerEvent("Event") def OnQuit(self3): self.TriggerEvent("Event") #--------------------------------------------------------------------- #--------------------------------------------------------------------- self.DVBHandler = EventHandler def __start__(self, useSendMessage=False): if useSendMessage: self.SearchWindowProc = eg.plugins.Window.FindWindow.Compile( 'DVBViewer.exe', None, 'TfrmMain', None, None, 1, True, 0.0, 0 ) self.SendCommand = self.SendCommandThroughSendMessage else: self.SendCommand = self.SendCommandThroughCOM def SendCommandThroughSendMessage(self, value): hwnds = self.SearchWindowProc() if len(hwnds) == 0: self.PrintError("Couldn't find DVBViewer window") return _, result = SendMessageTimeout( hwnds[0], 45762, 2069, 100 + value, SMTO_BLOCK|SMTO_ABORTIFHUNG, 2000 # wait at most 2 seconds ) def SendCommandThroughCOM(self, value): if self.DVBViewer is None: self.DVBViewer = DispatchWithEvents("DVBViewerServer.DVBViewer", self.DVBHandler) self.DVBEvents = self.DVBViewer.events try: self.DVBViewer.SendCommand(value) except pythoncom.com_error: del self.DVBViewer self.DVBViewer = None self.DVBViewer = DispatchWithEvents("DVBViewerServer.DVBViewer", self.DVBHandler) self.DVBViewer.SendCommand(value) def Configure(self, useSendMessage=False): dialog = eg.ConfigurationDialog(self) choices = [ "COM-API (for DVBViewer Pro)", "SendMessage-API (for DVBViewer GE)" ] radioBox = wx.RadioBox( dialog, -1, "Interface API", choices=choices, style=wx.RA_SPECIFY_ROWS ) radioBox.SetSelection(int(useSendMessage)) dialog.sizer.Add(radioBox, 0, wx.EXPAND) if dialog.AffirmedShowModal(): return (radioBox.GetSelection() == 1, ) class Start(eg.ActionClass): name = "Start DVBViewer" description = "Start DVBViewer through COM-API. For DVBViewer Pro only." def __call__(self): self.plugin.DVBViewer = Dispatch("DVBViewerServer.DVBViewer") Quote Link to comment
nativityplay82 Posted June 13, 2007 Author Share Posted June 13, 2007 Hallo Leute, das hat sich alles erledigt, habe das Empfangen der Events mit Python (für EventGhost) hinbekommen. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.