# -*- coding: utf-8 -*-
import sys, time, os, platform
from PyQt4 import QtCore
from PyQt4.QtCore import *
#Add libs to path and import if needed
if platform.system() == 'Windows':
sys.path.append("libs" + os.path.sep + "kbhookwin")
from HookManager import *
elif platform.system() == 'Linux':
sys.path.append("libs" + os.path.sep + "kbhooklin")
import Xlib, Xlib.X, Xlib.Xatom, Xlib.display, Xlib.protocol.event
from pyxhook import *
elif platform.system() == 'Darwin':
pass
else:
pass
class HMSystem():
def __init__(self, parent=None):
self.parent = parent
self.hm = HookManager()
def initHM(self):
self.hm.KeyDown = self.kbEvent
if platform.system() == 'Windows':
self.hm.HookKeyboard()
elif platform.system() == 'Linux':
self.hm.HookKeyboard()
self.hm.start()
elif platform.system() == 'Darwin':
pass
else:
pass
def kbEvent(self, e):
if self.mustFocus():
self.parent.emit(QtCore.SIGNAL("toggle_visibility(PyQt_PyObject)"), e)
def stopHM(self):
if platform.system() == 'Window':
self.hm.UnhookKeyboard()
elif platform.system() == 'Linux':
self.hm.cancel()
elif platform.system() == 'Darwin':
pass
else:
pass
def mustFocus(self):
if platform.system() == 'Windows':
return False
elif platform.system() == 'Linux':
return True
elif platform.system() == 'Darwin':
return False
else:
return False
def focus(self):
try:
display = Xlib.display.Display()
root = display.screen().root
inspection_list = [Xlib.display.Display().screen().root]
active_window_atom = display.intern_atom("_NET_ACTIVE_WINDOW", only_if_exists=True)
while len(inspection_list) != 0:
awin = inspection_list.pop(0)
if awin.get_wm_name() == str(self.parent.windowTitle()):
while not awin.get_attributes().map_state == X.IsViewable:
time.sleep(0.1)
clientmessage = Xlib.protocol.event.ClientMessage(client_type=active_window_atom, window=awin, data=(32, (0, 0, 0, 0, 0)))
root.send_event(clientmessage, event_mask=Xlib.X.SubstructureNotifyMask)
display.flush()
self.parent.emit(QtCore.SIGNAL("giveFocus()"))
break
children = awin.query_tree().children
if children != None: inspection_list += children
except:
pass