Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

EventGhost & DVBViewer -> R├╝ckmeldung vom DVB-Viewer

Allgemeines zum Thema EventGhost
Post Reply
nativityplay82
Posts: 4
Joined: Tue Jun 05, 2007 9:11 am

EventGhost & DVBViewer -> R├╝ckmeldung vom DVB-Viewer

Post by nativityplay82 »

Anscheinend sendet das COM-Interface des DVBVirewers events sobald eine Aktion ausgef├╝hrt wird. Z.B. beim ├Âffnen des OSD-Men├╝s.

Ich m├Âchte in EG auf diese Aktionen reagieren, also ein entsprechendes Ereignis im EG erhalten (├ñhnlich dem Plugin Task create/switch events).

Ich habe mit schon das soeben genannte Plugin angeschaut aber auch das DVBViewer Plugin. Doch leider werde ich aus beiden nicht schlau (Python DAU).

Hat mir jemand eine Idee?
nativityplay82
Posts: 4
Joined: Tue Jun 05, 2007 9:11 am

Aller Anfang ist schwer

Post by nativityplay82 »

Also ich habe mal versucht ein bisschen was zu programmieren:

Mir ist nicht ganz klar:
a) Meines wissens nach ist die COM-Schnittstelle des DVBViewers im Grunde eine DLL. Im DVBViewer Plugin ist diese aber nicht erwähnt. Kann das alles also überhaupt funktionieren?
b) EG muss immer bereit sein einen Event zu erhalten und entsprechend die Sub self.TriggerEvent mit den entsprechenden Eventnamen/ID ausf├╝hren. Bin ich da mit dem eg.messageReceiver.AddHandler... auf dem Holzweg?


#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
import eg

class PluginInfo(eg.PluginInfo):
name = "DVBViewer Event Receiver"
author = "Nativityplay92"
version = "1.0"
kind = "program"
description = (
'Get the events from DVBViewer COM-Interface'
)
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=="
)


import wx
import pythoncom
from win32com.client import Dispatch
from win32gui import SendMessageTimeout
from win32con import SMTO_BLOCK, SMTO_ABORTIFHUNG


class DVBViewerEvents(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)


def __start__(self, useSendMessage=False):
eg.messageReceiver.AddHandler(?????, self.MyWndProc)
RegisterShellHookWindow(eg.messageReceiver.hwnd)
# self.SendCommand = self.SendCommandThroughCOM


def MyWndProc():
self.TriggerEvent(eventname)


def SendCommandThroughCOM(self, value):

if self.dvbviewer is None:
self.dvbviewer = Dispatch("DVBViewerServer.DVBViewer")
try:
self.dvbviewer.SendCommand(value)
except pythoncom.com_error:
del self.dvbviewer
self.dvbviewer = None
self.dvbviewer = Dispatch("DVBViewerServer.DVBViewer")
self.dvbviewer.SendCommand(value)


# def Configure(self, useSendMessage=False):
# dialog = eg.ConfigurationDialog(self)
# choices = [
# "Das lassen wir mal drinne",
# "aber nur als beispiel"
# ]
# 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")

#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

1, In der Regel ist ein COM-Server eine EXE. Die meldet sich beim Betreibssystem an, dass sie z.B. ein Interface mit den Namen "DVBViewerServer.DVBViewer" hat und den Rest macht dann Windows so ziemlich allein.

2. Ja, da bist du ein bisschen auf dem Holzweg. Es ist zwar richtig, dass COM hinter den Kulissen über Messages läuft, ähnlich wie Fenster-Messages, aber der Programmierer kriegt davon gar nichts mit. Er sagt nur, was er haben will und das System stellt ihm die entsprechenden Funktionen der Applikation zur Verfügung. In Python läuft das über die Funktionen win32com.client.Dispatch (wenn man nur senden will) und win32com.client.DispatchWithEvents (wenn man auch empfangen will).

Ich baue das Plugin aber sowieso auf DispatchWithEvents um, wenn DVBViewer auch die Seitenverhältnis-Umschaltung als Event hat.
http://www.dvbviewer.info/forum/index.p ... opic=18859 (Problem 1.)

Nur ob und wann die das einbauen ist die Frage.
Please post software-related questions in the forum - PMs will only be answered, if really private, thanks!
nativityplay82
Posts: 4
Joined: Tue Jun 05, 2007 9:11 am

Deine gesammelten Probleme

Post by nativityplay82 »

Hallo Bitmonster,

vielen Dank f├╝r Deine Antwort, werde mal schauen ob ich bei *oo*** was finde, scheint wohl so, dass ich bei den Baiscs anfangen und mir diese Progr.-sprache auchnoch beibringen muss.

Deinen Post beim DVBViewer-Forum habe ich schon gelesen... aber ├╝ber die Antworten bin ich erstaunt. Zumal es doch im Interesse fast aller DVBViewer-Nutzer sein sollte ein OpenSource Remote-Tool zu unterst├╝tzen. Wie auch immer... Kommt Zeit kommt Rat.
nativityplay82
Posts: 4
Joined: Tue Jun 05, 2007 9:11 am

Hilfe!!!

Post by nativityplay82 »

Helft mir bitte, ich bekomms nichtmal mit Excel hin:



import eg

class PluginInfo(eg.PluginInfo):
name = "Excel Watcher 22"
author = "THF"
version = "1.0"
description = (
"Generates events 4 Excel."
)


from win32com.client import DispatchWithEvents
from win32com.client import Dispatch
import msvcrt, pythoncom
import time, sys
import types

import threading
stopEvent = threading.Event()



class Excel(eg.PluginClass):
def __init__(self):
print "HUGO"
e = DispatchWithEvents("Excel.Application", ExcelEvents)
thread = win32api.GetCurrentThreadId()
print 'TestExplorerEvents created IE object on thread %d'%thread


class ExcelEvents:
def OnNewWorkbook(self, wb):
print "ich bin hier"
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bitte Code-Schnippsel immer zwischen

Code: Select all

-Tags stellen.
Und bei Fehlern immer das Traceback posten, wenn vorhanden.
Please post software-related questions in the forum - PMs will only be answered, if really private, thanks!
Post Reply