home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / gui / toolbox / monitor / monitorwin.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  6.4 KB  |  190 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  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.  
  44. def Monitor_FromWindow(window):
  45.     return Monitor_FromHandle(window.Handle)
  46.  
  47.  
  48. def Monitor_FromHandle(handle):
  49.     return Monitor(MonitorFromWindow(handle, MONITOR_DEFAULTTONEAREST))
  50.  
  51.  
  52. def Monitor_FromRect(rect, find_near = True):
  53.     hmonitor = None(MonitorFromRect, byref(wxRectToRECT(rect)) if find_near else MONITOR_DEFAULTTONULL)
  54.     if hmonitor:
  55.         return Monitor(hmonitor)
  56.     
  57.  
  58.  
  59. def Monitor_FromDeviceId(deviceId, orPrimary = True):
  60.     mons = Monitor.All()
  61.     for mon in mons:
  62.         if mon.DeviceId == deviceId:
  63.             return mon
  64.             continue
  65.     
  66.     if orPrimary:
  67.         for mon in mons:
  68.             if mon.Primary:
  69.                 return mon
  70.                 continue
  71.         
  72.     
  73.  
  74.  
  75. class Monitor(object):
  76.     
  77.     def __init__(self, hmonitor):
  78.         self.hmonitor = hmonitor
  79.  
  80.     
  81.     def GetClientArea(self):
  82.         
  83.         try:
  84.             return self._clientarea
  85.         except AttributeError:
  86.             self._getinfo()
  87.             return self._clientarea
  88.  
  89.  
  90.     ClientArea = property(GetClientArea)
  91.     
  92.     def GetGeometry(self):
  93.         
  94.         try:
  95.             return self._geometry
  96.         except AttributeError:
  97.             self._getinfo()
  98.             return self._geometry
  99.  
  100.  
  101.     Geometry = property(GetGeometry)
  102.     
  103.     def GetDeviceId(self):
  104.         
  105.         try:
  106.             return self._deviceid
  107.         except AttributeError:
  108.             self._getinfo()
  109.             return self._deviceid
  110.  
  111.  
  112.     DeviceId = property(GetDeviceId)
  113.     GetFromPoint = staticmethod(Monitor_FromPoint)
  114.     GetFromPointer = staticmethod((lambda : Monitor_FromPoint(GetMousePosition(), find_near = True)))
  115.     GetFromWindow = staticmethod(Monitor_FromWindow)
  116.     GetFromRect = staticmethod(Monitor_FromRect)
  117.     GetFromHandle = staticmethod(Monitor_FromHandle)
  118.     GetFromDeviceId = staticmethod(Monitor_FromDeviceId)
  119.     
  120.     def GetCount():
  121.         return len(get_hmonitors())
  122.  
  123.     GetCount = staticmethod(GetCount)
  124.     
  125.     def All():
  126.         return [ Monitor(hmonitor) for hmonitor in get_hmonitors() ]
  127.  
  128.     All = staticmethod(All)
  129.     if hasattr(cgui, 'GetMonitorInfo'):
  130.         
  131.         def _getinfo(self):
  132.             (work, mon, self._deviceid) = cgui.GetMonitorInfo(self.hmonitor)
  133.             self._clientarea = RECTtuple_to_rect(work)
  134.             self._geometry = RECTtuple_to_rect(mon)
  135.  
  136.     else:
  137.         
  138.         def _getinfo(self):
  139.             info = MONITORINFOEX()
  140.             info.cbSize = MONITORINFOEX_size
  141.             if not GetMonitorInfo(self.hmonitor, byref(info)):
  142.                 raise WinError()
  143.             
  144.             self._clientarea = wxRectFromRECT(info.rcWork)
  145.             self._geometry = wxRectFromRECT(info.rcMonitor)
  146.             self._deviceid = wstring_at(info.szDevice)
  147.  
  148.     
  149.     def IsPrimary(self):
  150.         pos = self.Geometry.Position
  151.         if pos.y == pos.y:
  152.             pass
  153.         elif pos.y == 0:
  154.             return True
  155.         
  156.         return False
  157.  
  158.     Primary = property(IsPrimary)
  159.  
  160.  
  161. try:
  162.     from cgui import GetHMONITORs as get_hmonitors
  163. except ImportError:
  164.     EnumDisplayMonitors = user32.EnumDisplayMonitors
  165.     _hmonitors = []
  166.     
  167.     def MultimonEnumProc(hMonitor, hdcMonitor, lprcMonitor, dwData):
  168.         _hmonitors.append(hMonitor)
  169.         return True
  170.  
  171.     
  172.     def get_hmonitors():
  173.         del _hmonitors[:]
  174.         EnumDisplayMonitors(None, None, MultimonEnumProc, None)
  175.         return _hmonitors
  176.  
  177.  
  178.  
  179. def RECTtuple_to_rect(r):
  180.     return Rect(r[0], r[1], r[2] - r[0], r[3] - r[1])
  181.  
  182. wx.Window.Monitor = Monitor_FromWindow
  183.  
  184. def main():
  185.     print [ m.ClientArea for m in Monitor.All() ]
  186.  
  187. if __name__ == '__main__':
  188.     main()
  189.  
  190.