Zwei Klick-Befehle in einem Makro [gelöst]

Allgemeines zum Thema EventGhost
Post Reply
Maschi
Posts: 3
Joined: Sat Aug 28, 2010 10:17 pm

Zwei Klick-Befehle in einem Makro [gelöst]

Post by Maschi » Sat Aug 28, 2010 10:27 pm

Hallo,

ich möchte es zum einen möglich machen die ZDF-Mediathek bei mir am Rechner zu steuern (mit simulierten Klicks), als auch das WMPlayer-Plugin. Leider wird immer nur der letzte Klick ausgeführt. Weiß jemand, wie man dieses Problem beheben kann? Eine Pause hilft nicht. Mit dem senden einer Nachricht und verarbeiten in einem zweiten Makro habe ich leider das Problem gehabt, dass ne Art Endlosschleife entstanden ist.

Edit: Bei der Endlosschleife habe ich wohl nen Fehler gemacht gehabt. Leider Funktioniert dies nicht. Ich habe es nun so gelöst bekommen, dass ich überprüfe, ob der Firefox als Unterfenster die Mediathek / das WMPlayer Plugin hat und leite dann auf entsprechende Makros um.

Achtung: Beim Wechsel in den Vollbildmodus wird in ein anderes Fenster gewechselt!

Maschi
Posts: 3
Joined: Sat Aug 28, 2010 10:17 pm

Re: Zwei Klick-Befehle in einem Makro [gelöst]

Post by Maschi » Sat Sep 11, 2010 7:18 pm

Ich habe die Makros nun auf Python-Skripte umgestellt. Diese benutzen die WinAPI um den Fenstertitel von Firefox zu ermitteln und anhand diesem zwischen den verschiedenen Aktionen für ZDF-Mediathek, ARD-Mediathek, 3sat-Mediathek und WindowsMediaPlayerPlugin zu unterscheiden. Anschlißend wird die Cursorposition mit windll.user32.SetCursorPos(x,y) gesetzt und mittels win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); ein Klick simuliert. Es wird Play/Pause, Stop (je nach Seite) und Vollbild unterstützt. Ausgegangen wird bei den Klicksimulationen vom maximierten Firefox mit Menüleiste, Navigations-Symbolleiste, Lesezeichen-Symbolseite, Tabs und Statusleiste bei FullHD-Auflösung (1920 × 1080 Pixel).

Hier mal das Beispiel für Play/Pause direkt im Firefox:

Code: Select all

import win32gui as WGui, win32con, win32api, time
from ctypes import windll

FWindow=WGui.GetWindowText(WGui.GetForegroundWindow())
ZDFM=FWindow.find("ZDFmediathek")
WMPP=FWindow.find("video/x-ms-asf-Objekt")
SATM=FWindow.find("3sat.Mediathek - Video")
WMPPF=FWindow.find("FullScreenBottomLayout")
WMPPF2=FWindow.find("WMPTransition")
ARDM=FWindow.find("ARD Mediathek:")

if ZDFM!=-1:
    windll.user32.SetCursorPos(465,930)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

if WMPP!=-1:
    windll.user32.SetCursorPos(20,1040)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

if SATM!=-1:
    windll.user32.SetCursorPos(620,515)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

if (WMPPF!=-1) or (WMPPF2!=-1):
    windll.user32.SetCursorPos(950,1079)
    windll.user32.SetCursorPos(950,1040)
    time.sleep(0.1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

if ARDM!=-1:
    windll.user32.SetCursorPos(730,590)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);



Hier die Einzelnen Schnipsel (sie müssen an die richtigen Stelle in EventGhost kopiert werden):

Ordner Firefox aktivieren:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Macro Name="Aktiviere exklusiv: Firefox" Expanded="True">
        <Event Name="Task.Activated.firefox" />
        <Action>
            EventGhost.EnableExclusive(XmlIdLink(439))
        </Action>
    </Macro>
</EventGhost>
Ordner Firefox Vollbild aktivieren:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Macro Name="Aktiviere exklusiv: Firefox Vollbild" Expanded="True">
        <Event Name="Task.Activated.plugin-container" />
        <Action>
            EventGhost.EnableExclusive(XmlIdLink(472))
        </Action>
    </Macro>
</EventGhost>
Ordner Firefox Vollbild deaktivieren:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Macro Name="Deaktiviere Firefox Vollbild" Expanded="True">
        <Event Name="Task.Deactivated.plugin-container" />
        <Action>
            EventGhost.PythonScript(u'import win32gui as WGui, win32api, win32con, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.FindWindow(\'MozillaUIWindowClass\',None))\nZDFM=FWindow.find("ZDFmediathek")\n\nif ZDFM!=-1:\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(1430,800)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n')
        </Action>
    </Macro>
</EventGhost>
Firefox Ordner:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Folder Name="Firefox" id="439" Enabled="False" Expanded="True">
        <Macro Name="Play/Pause" Expanded="True">
            <Event Name="X10.Play" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32con, win32api, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.GetForegroundWindow())\nZDFM=FWindow.find("ZDFmediathek")\nWMPP=FWindow.find("video/x-ms-asf-Objekt")\nSATM=FWindow.find("3sat.Mediathek - Video")\nWMPPF=FWindow.find("FullScreenBottomLayout")\nWMPPF2=FWindow.find("WMPTransition")\nARDM=FWindow.find("ARD Mediathek:")\n\nif ZDFM!=-1:\n    windll.user32.SetCursorPos(465,930)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif WMPP!=-1:\n    windll.user32.SetCursorPos(20,1040)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif SATM!=-1:\n    windll.user32.SetCursorPos(620,515)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif (WMPPF!=-1) or (WMPPF2!=-1):\n    windll.user32.SetCursorPos(950,1079)\n    windll.user32.SetCursorPos(950,1040)\n    time.sleep(0.1)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(730,590)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n')
            </Action>
        </Macro>
        <Macro Name="Stop" Expanded="True">
            <Event Name="X10.Stop" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32con, win32api, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.GetForegroundWindow())\nWMPP=FWindow.find("video/x-ms-asf-Objekt")\nSATM=FWindow.find("3sat.Mediathek - Video")\nWMPPF=FWindow.find("FullScreenBottomLayout")\nWMPPF2=FWindow.find("WMPTransition")\nARDM=FWindow.find("ARD Mediathek:")\n\nif WMPP!=-1:\n    windll.user32.SetCursorPos(45,1040)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif SATM!=-1:\n    windll.user32.SetCursorPos(645,515)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif (WMPPF!=-1) or (WMPPF2!=-1):\n    windll.user32.SetCursorPos(865,1079)\n    windll.user32.SetCursorPos(865,1040)\n    time.sleep(0.1)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(810,590)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n    ')
            </Action>
        </Macro>
        <Macro Name="Fullscreen" Expanded="True">
            <Event Name="X10.D" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32con, win32api, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.GetForegroundWindow())\nZDFM=FWindow.find("ZDFmediathek")\nWMPP=FWindow.find("video/x-ms-asf-Objekt")\nSATM=FWindow.find("3sat.Mediathek - Video")\nWMPPF=FWindow.find("FullScreenBottomLayout")\nWMPPF2=FWindow.find("WMPTransition")\nARDM=FWindow.find("ARD Mediathek:")\n\nif ZDFM!=-1:\n    windll.user32.SetCursorPos(1350,930)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif WMPP!=-1:\n    windll.user32.SetCursorPos(950,500)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif SATM!=-1:\n    windll.user32.SetCursorPos(850,350)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif (WMPPF!=-1) or (WMPPF2!=-1):\n    windll.user32.SetCursorPos(950,500)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(950,590)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(960,590)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);')
            </Action>
        </Macro>
    </Folder>
</EventGhost>
Firefox Vollbild Ordner:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Folder Name="Firefox Vollbild" id="472" Enabled="False" Expanded="True">
        <Macro Name="Play/Pause" Expanded="True">
            <Event Name="X10.Play" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32api, win32con, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.FindWindow(\'MozillaUIWindowClass\',None))\nZDFM=FWindow.find("ZDFmediathek")\nARDM=FWindow.find("ARD Mediathek:")\n\n\nif ZDFM!=-1:\n    windll.user32.SetCursorPos(0,1080)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(230,1010)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(950,1010)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(950,1040)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n')
            </Action>
        </Macro>
        <Macro Name="Fullscreen" Expanded="True">
            <Event Name="X10.D" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32api, win32con, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.FindWindow(\'MozillaUIWindowClass\',None))\nZDFM=FWindow.find("ZDFmediathek")\nARDM=FWindow.find("ARD Mediathek:")\n\n\nif ZDFM!=-1:\n    windll.user32.SetCursorPos(0,1080)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(1550,1010)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(1890,1010)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(1890,1040)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n')
            </Action>
        </Macro>
        <Macro Name="Python Script" Expanded="True">
            <Event Name="X10.Stop" />
            <Action>
                EventGhost.PythonScript(u'import win32gui as WGui, win32api, win32con, time\nfrom ctypes import windll\n\nFWindow=WGui.GetWindowText(WGui.FindWindow(\'MozillaUIWindowClass\',None))\nARDM=FWindow.find("ARD Mediathek:")\n\nif ARDM!=-1:\n    windll.user32.SetCursorPos(1020,1010)\n    time.sleep(0.05)\n    windll.user32.SetCursorPos(1020,1040)\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);\n    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);\n')
            </Action>
        </Macro>
    </Folder>
</EventGhost>
Dies ist bei mir in Keboardsimulation drin:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1462">
    <Event Name="Task.Deactivated.firefox" />
</EventGhost>

Post Reply