home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / gui / toolbox / monitor / monitorwin.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  6.4 KB  |  179 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import ctypes
  5. from ctypes import byref, WinError, wstring_at
  6. from ctypes.wintypes import POINT, RECT, DWORD, WCHAR
  7. from gui.native.win.winextensions import wxRectFromRECT, wxRectToRECT
  8. import wx
  9. from wx import Rect, GetMousePosition
  10. import cgui
  11. user32 = ctypes.windll.user32
  12. MonitorFromPoint = user32.MonitorFromPoint
  13. MonitorFromWindow = user32.MonitorFromWindow
  14. MonitorFromRect = user32.MonitorFromRect
  15. GetMonitorInfo = user32.GetMonitorInfoW
  16. MONITOR_DEFAULTTONULL = 0
  17. MONITOR_DEFAULTTOPRIMARY = 1
  18. MONITOR_DEFAULTTONEAREST = 2
  19. CCHDEVICENAME = 32
  20.  
  21. class MONITORINFOEX(ctypes.Structure):
  22.     _fields_ = [
  23.         ('cbSize', DWORD),
  24.         ('rcMonitor', RECT),
  25.         ('rcWork', RECT),
  26.         ('dwFlags', DWORD),
  27.         ('szDevice', WCHAR * CCHDEVICENAME)]
  28.  
  29. MONITORINFOEX_size = ctypes.sizeof(MONITORINFOEX)
  30.  
  31. def makePOINT(point):
  32.     pt = POINT()
  33.     (pt.x, pt.y) = point
  34.     return pt
  35.  
  36.  
  37. def Monitor_FromPoint(point, find_near = False):
  38.     hmonitor = None(MonitorFromPoint, makePOINT(point) if find_near else MONITOR_DEFAULTTONULL)
  39.     if hmonitor:
  40.         return Monitor(hmonitor)
  41.  
  42.  
  43. def Monitor_FromWindow(window):
  44.     return Monitor_FromHandle(window.Handle)
  45.  
  46.  
  47. def Monitor_FromHandle(handle):
  48.     return Monitor(MonitorFromWindow(handle, MONITOR_DEFAULTTONEAREST))
  49.  
  50.  
  51. def Monitor_FromRect(rect, find_near = True):
  52.     hmonitor = None(MonitorFromRect, byref(wxRectToRECT(rect)) if find_near else MONITOR_DEFAULTTONULL)
  53.     if hmonitor:
  54.         return Monitor(hmonitor)
  55.  
  56.  
  57. def Monitor_FromDeviceId(deviceId, orPrimary = True):
  58.     mons = Monitor.All()
  59.     for mon in mons:
  60.         if mon.DeviceId == deviceId:
  61.             return mon
  62.     
  63.  
  64.  
  65. class Monitor(object):
  66.     
  67.     def __init__(self, hmonitor):
  68.         self.hmonitor = hmonitor
  69.  
  70.     
  71.     def GetClientArea(self):
  72.         
  73.         try:
  74.             return self._clientarea
  75.         except AttributeError:
  76.             self._getinfo()
  77.             return self._clientarea
  78.  
  79.  
  80.     ClientArea = property(GetClientArea)
  81.     
  82.     def GetGeometry(self):
  83.         
  84.         try:
  85.             return self._geometry
  86.         except AttributeError:
  87.             self._getinfo()
  88.             return self._geometry
  89.  
  90.  
  91.     Geometry = property(GetGeometry)
  92.     
  93.     def GetDeviceId(self):
  94.         
  95.         try:
  96.             return self._deviceid
  97.         except AttributeError:
  98.             self._getinfo()
  99.             return self._deviceid
  100.  
  101.  
  102.     DeviceId = property(GetDeviceId)
  103.     GetFromPoint = staticmethod(Monitor_FromPoint)
  104.     GetFromPointer = staticmethod((lambda : Monitor_FromPoint(GetMousePosition(), find_near = True)))
  105.     GetFromWindow = staticmethod(Monitor_FromWindow)
  106.     GetFromRect = staticmethod(Monitor_FromRect)
  107.     GetFromHandle = staticmethod(Monitor_FromHandle)
  108.     GetFromDeviceId = staticmethod(Monitor_FromDeviceId)
  109.     
  110.     def GetCount():
  111.         return len(get_hmonitors())
  112.  
  113.     GetCount = staticmethod(GetCount)
  114.     
  115.     def All():
  116.         return [ Monitor(hmonitor) for hmonitor in get_hmonitors() ]
  117.  
  118.     All = staticmethod(All)
  119.     if hasattr(cgui, 'GetMonitorInfo'):
  120.         
  121.         def _getinfo(self):
  122.             (work, mon, self._deviceid) = cgui.GetMonitorInfo(self.hmonitor)
  123.             self._clientarea = RECTtuple_to_rect(work)
  124.             self._geometry = RECTtuple_to_rect(mon)
  125.  
  126.     else:
  127.         
  128.         def _getinfo(self):
  129.             info = MONITORINFOEX()
  130.             info.cbSize = MONITORINFOEX_size
  131.             if not GetMonitorInfo(self.hmonitor, byref(info)):
  132.                 raise WinError()
  133.             GetMonitorInfo(self.hmonitor, byref(info))
  134.             self._clientarea = wxRectFromRECT(info.rcWork)
  135.             self._geometry = wxRectFromRECT(info.rcMonitor)
  136.             self._deviceid = wstring_at(info.szDevice)
  137.  
  138.     
  139.     def IsPrimary(self):
  140.         pos = self.Geometry.Position
  141.         if pos.y == pos.y:
  142.             pass
  143.         elif pos.y == 0:
  144.             return True
  145.         return False
  146.  
  147.     Primary = property(IsPrimary)
  148.  
  149.  
  150. try:
  151.     from cgui import GetHMONITORs as get_hmonitors
  152. except ImportError:
  153.     EnumDisplayMonitors = user32.EnumDisplayMonitors
  154.     _hmonitors = []
  155.     
  156.     def MultimonEnumProc(hMonitor, hdcMonitor, lprcMonitor, dwData):
  157.         _hmonitors.append(hMonitor)
  158.         return True
  159.  
  160.     
  161.     def get_hmonitors():
  162.         del _hmonitors[:]
  163.         EnumDisplayMonitors(None, None, MultimonEnumProc, None)
  164.         return _hmonitors
  165.  
  166.  
  167.  
  168. def RECTtuple_to_rect(r):
  169.     return Rect(r[0], r[1], r[2] - r[0], r[3] - r[1])
  170.  
  171. wx.Window.Monitor = Monitor_FromWindow
  172.  
  173. def main():
  174.     print [ m.ClientArea for m in Monitor.All() ]
  175.  
  176. if __name__ == '__main__':
  177.     main()
  178.  
  179.