"Generates events when an application starts, exits, flashes the " "taskbar, or gets switched into focus."), icon=( "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABuklEQVR42o1Sv0tCYRQ9" "L1FccpCEB73wVy1NjTrUPxD1lgZp0dWKaAhXxWhoyWgoIUjHBEH65RSE0CAUgWIPLAqR" "gkAQIQXR8nW/Z0ai6btweJfDd847934fhz8VCARkqCjTmBGra+sc67kOGQqFZIfDMVCo" "1WphMpng9/vxkMvi9u6e4zp/ZmStVkOpVOor1mg00Ol0CIfDKBQK/Q1isRhcLhedJpIn" "vHXkI+D5SUSj+0in0wMM4mSw6WqL9whLhHeCYAA/tobo9twQgxsyEMjglUj6IE7YIJxQ" "gk9K8DwsgTLCMjGGdvJxJibMUgJ+hUaYGWyQSCQQDO7+ZO8uo1EHn8/2v4Hb7UYmkxl4" "jY1GA9lsFrlcDl+fDZxfJNsGHo9H1QNiVa/XlQSiuIAp2wS466ukHNjaUauHXq+H0+n8" "HYPrzF+pVHriSpLUxbGHJAgCIpFIr0EqlYI0KmH6Y1o5XC6XaaFBpW+1WqhWq7BYLLRI" "X9ciFQNRFJHP53FoO4T3xdsTu9lsolgswm63Kz1b9tPTI6xmAVzk+Eg+PbtUvQNWstxS" "xHv7B+1bEBfnVd8CK6vFrIhZ/w1wBAQrC42uqQAAAABJRU5ErkJggg=="), ) ENUM_WINDOWS_PROC_TYPE = WINFUNCTYPE(BOOL, HWND, LPARAM) EnumWindows.argtypes = [ENUM_WINDOWS_PROC_TYPE, LPARAM] WM_SHELLHOOKMESSAGE = RegisterWindowMessage("SHELLHOOK") class TaskMonitorPlus(eg.PluginBase): def __init__(self): self.AddEvents() def __start__(self, *dummyArgs): self.pids, self.hwnds = EnumProcesses() self.flashing = set() self.lastActivated = None eg.messageReceiver.AddHandler(WM_APP + 1, self.WindowGotFocusProc) eg.messageReceiver.AddHandler(WM_APP + 2, self.WindowCreatedProc)
def Setup( self, plugin, waitTime, pollTime, useDefaultPollTime, initTime = 15.0, checkRepeatFlag = False, repeatReleaseTime = 200 ): """ This will be called inside the thread at the beginning. """ self.lock = Lock() self.abort = False self.plugin = plugin self.waitTime = float(waitTime)/1000.0 self.repeatReleaseTime = float(repeatReleaseTime)/1000.0 self.pollTime = pollTime self.useDefaultPollTime = useDefaultPollTime self.defaultPollTime = -1 self.LastKeyCode = -1 self.checkRepeatFlag = checkRepeatFlag self.repeatCode = c_int(0) self.systemCode = c_int(0) self.keyCode = c_int(0) self.lastEvent = eg.EventGhostEvent() self.keyStillPressed = False self.initTerminated = False self.timerInit = None self.timerKey = None self.hwnd = None self.dll = None # load irremote.dll try: regHandle = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Hauppauge WinTV Infrared Remote', 0, _winreg.KEY_READ ) InstallString = _winreg.QueryValueEx(regHandle, 'UninstallString')[0] _winreg.CloseKey( regHandle ) irremoteDir = InstallString.partition(' ')[0].rsplit('\\',1)[0] dllPath = os.path.join(irremoteDir, "irremote.DLL") self.dll = windll.LoadLibrary(dllPath) self.dll = WinDLL(dllPath) except: plugin.PrintError("Couldn't find irremote.dll! Reinstalling the Hauppauge " "WinTV Infrared Remote package can solve the problem." ) raise self.plugin.Exceptions.DeviceNotFound self.IR_Open = WINFUNCTYPE( c_int, HWND, c_int, c_byte, c_int ) self.IR_Close = WINFUNCTYPE( c_int, HWND, c_int ) self.IR_GetSystemKeyCode = WINFUNCTYPE( c_int, POINTER( c_int), POINTER( c_int), POINTER( c_int) ) self.TIMERPROC = WINFUNCTYPE( None, HWND, c_uint, c_uint, DWORD ) self.IR_Open = self.dll.IR_Open self.IR_Close = self.dll.IR_Close self.IR_GetSystemKeyCode = self.dll.IR_GetSystemKeyCode wc = WNDCLASS() wc.hInstance = GetDesktopWindow() wc.lpszClassName = "HaupPluginEventSinkWndClass" wc.lpfnWndProc = WNDPROC(self.MyWndProc) if not RegisterClass(byref(wc)): raise WinError() self.hwnd = CreateWindow( wc.lpszClassName, "HaupaugePlugin Event Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, wc.hInstance, None ) if not self.hwnd: raise WinError() self.wc = wc self.hinst = wc.hInstance self.timerInit = Timer( initTime, self.PostInit) # Init delayed init timer ( in case of standby problems) self.timerInit.start()
GetModuleHandle, RegisterClass, UnregisterClass, BOOL, HANDLE, HWND, LPCWSTR, WINFUNCTYPE, WNDCLASS, WNDPROC, CW_USEDEFAULT, WM_KEYDOWN, WS_OVERLAPPEDWINDOW ) prototype = WINFUNCTYPE(BOOL, HWND, LPCWSTR, HANDLE) paramflags = (1, "hWnd", 0), (1, "lpString", None), (1, "hData", 0) SetProp = prototype(("SetPropW", _user32), paramflags) prototype = WINFUNCTYPE(HANDLE, HWND, LPCWSTR) paramflags = (1, "hWnd", 0), (1, "lpString", None) RemoveProp = prototype(("RemovePropW", _user32), paramflags) class PCTVMessageReceiver(eg.ThreadWorker): def Setup(self, plugin, msgQueue): self.plugin = plugin self.msgQueue = msgQueue self.wndClass = WNDCLASS(