home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2450 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  6.1 KB  |  186 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import win32api
  5. import win32con
  6. import win32gui
  7. import win32service
  8. import win32process
  9. import pywintypes
  10. import traceback
  11. import thread
  12. import time
  13. import cStringIO
  14.  
  15. def desktop_name_dlgproc(hwnd, msg, wparam, lparam):
  16.     if msg in (win32con.WM_CLOSE, win32con.WM_DESTROY):
  17.         win32gui.DestroyWindow(hwnd)
  18.     elif msg == win32con.WM_COMMAND:
  19.         if wparam == win32con.IDOK:
  20.             desktop_name = win32gui.GetDlgItemText(hwnd, 72)
  21.             print 'new desktop name: ', desktop_name
  22.             win32gui.DestroyWindow(hwnd)
  23.             create_desktop(desktop_name)
  24.         elif wparam == win32con.IDCANCEL:
  25.             win32gui.DestroyWindow(hwnd)
  26.         
  27.     
  28.  
  29.  
  30. def get_new_desktop_name(parent_hwnd):
  31.     msgs = {
  32.         win32con.WM_COMMAND: desktop_name_dlgproc,
  33.         win32con.WM_CLOSE: desktop_name_dlgproc,
  34.         win32con.WM_DESTROY: desktop_name_dlgproc }
  35.     style = win32con.WS_BORDER | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU
  36.     h = win32gui.CreateDialogIndirect(win32api.GetModuleHandle(None), [
  37.         [
  38.             'One ugly dialog box !',
  39.             (100, 100, 200, 100),
  40.             style,
  41.             0],
  42.         [
  43.             'Button',
  44.             'Create',
  45.             win32con.IDOK,
  46.             (10, 10, 30, 20),
  47.             win32con.WS_VISIBLE | win32con.WS_TABSTOP | win32con.BS_HOLLOW | win32con.BS_DEFPUSHBUTTON],
  48.         [
  49.             'Button',
  50.             'Never mind',
  51.             win32con.IDCANCEL,
  52.             (45, 10, 50, 20),
  53.             win32con.WS_VISIBLE | win32con.WS_TABSTOP | win32con.BS_HOLLOW],
  54.         [
  55.             'Static',
  56.             'Desktop name:',
  57.             71,
  58.             (10, 40, 70, 10),
  59.             win32con.WS_VISIBLE],
  60.         [
  61.             'Edit',
  62.             '',
  63.             72,
  64.             (75, 40, 90, 10),
  65.             win32con.WS_VISIBLE]], parent_hwnd, msgs)
  66.     win32gui.EnableWindow(h, True)
  67.     hcontrol = win32gui.GetDlgItem(h, 72)
  68.     win32gui.EnableWindow(hcontrol, True)
  69.     win32gui.SetFocus(hcontrol)
  70.  
  71.  
  72. def new_icon(hdesk, desktop_name):
  73.     global id
  74.     id = id + 1
  75.     hdesk.SetThreadDesktop()
  76.     windowclassname = 'PythonDesktopManager' + desktop_name
  77.     wc = win32gui.WNDCLASS()
  78.     wc.hInstance = win32api.GetModuleHandle(None)
  79.     wc.lpszClassName = windowclassname
  80.     wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW | win32con.CS_GLOBALCLASS
  81.     wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
  82.     wc.hbrBackground = win32con.COLOR_WINDOW
  83.     wc.lpfnWndProc = icon_wndproc
  84.     windowclass = win32gui.RegisterClass(wc)
  85.     style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
  86.     hwnd = win32gui.CreateWindow(windowclass, 'dm_' + desktop_name, win32con.WS_SYSMENU, 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 0, 0, wc.hInstance, None)
  87.     win32gui.UpdateWindow(hwnd)
  88.     flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP
  89.     notify_info = (hwnd, id, flags, win32con.WM_USER + 20, hicon, 'Desktop Manager (%s)' % desktop_name)
  90.     window_info[hwnd] = notify_info
  91.     tray_found = 0
  92.     while not tray_found:
  93.         
  94.         try:
  95.             tray_found = win32gui.FindWindow('Shell_TrayWnd', None)
  96.         continue
  97.         except win32gui.error:
  98.             traceback.print_exc
  99.             time.sleep(0.5)
  100.             continue
  101.         
  102.  
  103.         None<EXCEPTION MATCH>win32gui.error
  104.     win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, notify_info)
  105.     win32gui.PumpMessages()
  106.  
  107.  
  108. def create_desktop(desktop_name, start_explorer = 1):
  109.     sa = pywintypes.SECURITY_ATTRIBUTES()
  110.     sa.bInheritHandle = 1
  111.     
  112.     try:
  113.         hdesk = win32service.CreateDesktop(desktop_name, 0, win32con.MAXIMUM_ALLOWED, sa)
  114.     except win32service.error:
  115.         traceback.print_exc()
  116.         errbuf = cStringIO.StringIO()
  117.         traceback.print_exc(None, errbuf)
  118.         win32api.MessageBox(0, errbuf.getvalue(), 'Desktop creation failed')
  119.         return None
  120.  
  121.     if start_explorer:
  122.         s = win32process.STARTUPINFO()
  123.         s.lpDesktop = desktop_name
  124.         prc_info = win32process.CreateProcess(None, 'Explorer.exe', None, None, True, win32con.CREATE_NEW_CONSOLE, None, 'c:\\', s)
  125.     
  126.     th = thread.start_new_thread(new_icon, (hdesk, desktop_name))
  127.     hdesk.SwitchDesktop()
  128.  
  129.  
  130. def icon_wndproc(hwnd, msg, wp, lp):
  131.     if lp == win32con.WM_LBUTTONDOWN:
  132.         win32gui.SetForegroundWindow(hwnd)
  133.         curr_desktop = win32service.OpenInputDesktop(0, True, win32con.MAXIMUM_ALLOWED)
  134.         curr_desktop_name = win32service.GetUserObjectInformation(curr_desktop, win32con.UOI_NAME)
  135.         winsta = win32service.GetProcessWindowStation()
  136.         desktops = winsta.EnumDesktops()
  137.         m = win32gui.CreatePopupMenu()
  138.         desktop_cnt = len(desktops)
  139.         for d in range(1, desktop_cnt + 1):
  140.             mf_flags = win32con.MF_STRING
  141.             if desktops[d - 1].lower() in ('winlogon', 'disconnect'):
  142.                 mf_flags = mf_flags | win32con.MF_GRAYED | win32con.MF_DISABLED
  143.             
  144.             if desktops[d - 1] == curr_desktop_name:
  145.                 mf_flags = mf_flags | win32con.MF_CHECKED
  146.             
  147.             win32gui.AppendMenu(m, mf_flags, d, desktops[d - 1])
  148.         
  149.         win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt + 1, 'Create new ...')
  150.         win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt + 2, 'Exit')
  151.         (x, y) = win32gui.GetCursorPos()
  152.         d = win32gui.TrackPopupMenu(m, win32con.TPM_LEFTBUTTON | win32con.TPM_RETURNCMD | win32con.TPM_NONOTIFY, x, y, 0, hwnd, None)
  153.         win32gui.PumpWaitingMessages()
  154.         win32gui.DestroyMenu(m)
  155.         if d == desktop_cnt + 1:
  156.             get_new_desktop_name(hwnd)
  157.         elif d == desktop_cnt + 2:
  158.             win32gui.PostQuitMessage(0)
  159.             win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, window_info[hwnd])
  160.             del window_info[hwnd]
  161.             origin_desktop.SwitchDesktop()
  162.         elif d > 0:
  163.             hdesk = win32service.OpenDesktop(desktops[d - 1], 0, 0, win32con.MAXIMUM_ALLOWED)
  164.             hdesk.SwitchDesktop()
  165.         
  166.         return 0
  167.     return win32gui.DefWindowProc(hwnd, msg, wp, lp)
  168.  
  169. window_info = { }
  170. origin_desktop = win32service.OpenInputDesktop(0, True, win32con.MAXIMUM_ALLOWED)
  171. origin_desktop_name = win32service.GetUserObjectInformation(origin_desktop, win32service.UOI_NAME)
  172. hinst = win32api.GetModuleHandle(None)
  173.  
  174. try:
  175.     hicon = win32gui.LoadIcon(hinst, 1)
  176. except win32gui.error:
  177.     hicon = win32gui.LoadIcon(hinst, 135)
  178.  
  179. id = 0
  180. create_desktop(str(origin_desktop_name), 0)
  181. while not window_info:
  182.     time.sleep(1)
  183. while window_info:
  184.     win32gui.PumpWaitingMessages()
  185.     time.sleep(3)
  186.