You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

858 lines
27 KiB
Python

'''
Module FIG
------------
Module for manipulating windows/figures created using
pylab or enthought.mayavi.mlab on the windows platform.
Figure manipulation involves
maximization, minimization, hiding, closing, stacking or tiling.
This module assumes that the figures are uniquely numbered in the following way:
Figure 1
Figure 2
....
or
TVTK scene 1
TVTK scene 2
TVTK scene 3
...
Example
-------
>>> import pylab as p
>>> import wafo.fig as fig
>>> for ix in range(6):
... f = p.figure(ix)
>>> fig.stack('all')
>>> fig.stack(1,2)
>>> fig.hide(1)
>>> fig.restore(1)
>>> fig.tile()
>>> fig.pile()
>>> fig.maximize(4)
>>> fig.close('all')
'''
#!/usr/bin/env python
from __future__ import division
# import win32api
import win32gui
import win32con
import msvcrt
import numpy
9 years ago
__all__ = ['close', 'cycle', 'hide', 'keep', 'maximize', 'minimize', 'pile',
'restore', 'stack', 'tile']
# Figure format strings to recognize in window title
13 years ago
_FIG_FORMATS = ('Figure', 'TVTK Scene', 'Chaco Plot Window: Figure')
_SCREENSIZE = None
9 years ago
def _getScreenSize(wnds):
''' Return screen size X,Y,W,H
Returns
--------
X Specifies the new position of the left side of the screen.
Y Specifies the new position of the top of the screen.
W Specifies the new width of the screen.
H Specifies the new height of the screen.
Parameters
----------
wnds: list of handles to open figures
(Note: only needed the first time)
'''
global _SCREENSIZE
9 years ago
if _SCREENSIZE is None:
MoveWindow = win32gui.MoveWindow
GetWindowRect = win32gui.GetWindowRect
SW_MAXIMIZE = win32con.SW_SHOWMAXIMIZED
hwnd = [wnds[0]]
pos = list(GetWindowRect(hwnd[0]))
pos[3] -= pos[1]
pos[2] -= pos[0]
_show_windows(hwnd, SW_MAXIMIZE)
9 years ago
_SCREENSIZE = list(GetWindowRect(hwnd[0])) # Screen size
_SCREENSIZE[3] -= _SCREENSIZE[1]
_SCREENSIZE[2] -= _SCREENSIZE[0]
_SCREENSIZE = tuple(_SCREENSIZE)
MoveWindow(hwnd[0], pos[0], pos[1], pos[2], pos[3], 1)
return list(_SCREENSIZE)
9 years ago
def _windowEnumerationHandler(hwnd, resultList):
9 years ago
'''Pass to win32gui.EnumWindows() to generate list of window handle,
window text tuples.
'''
resultList.append((hwnd, win32gui.GetWindowText(hwnd)))
9 years ago
def _findTopWindows(wantedTitle=None):
''' Return list of window handle and window title tuples
@param wantedTitle:
'''
topWindows = []
win32gui.EnumWindows(_windowEnumerationHandler, topWindows)
9 years ago
if wantedTitle is None:
return topWindows
else:
9 years ago
return [(hwnd, windowTxt) for hwnd, windowTxt in topWindows
if windowTxt.startswith(wantedTitle)]
def findallfigs():
'''
Return list of all figure numbers
'''
figs = []
global _FIG_FORMATS
for wantedTitle in _FIG_FORMATS:
windowList = _findTopWindows(wantedTitle)
for unused_hwnd, wndTitle in windowList:
try:
fig = int(wndTitle.split()[-1])
figs.append(fig)
except:
pass
figs.sort()
return figs
9 years ago
def _figparse(*args):
figs = []
for arg in args:
9 years ago
if isinstance(arg, (list, tuple, set)):
for val in arg:
figs.append(int(val))
13 years ago
elif isinstance(arg, int):
figs.append(arg)
elif arg == 'all':
figs = 'all'
break
else:
raise TypeError('Only integers arguments accepted!')
9 years ago
# raise TypeError('Unrecognized argument type (%s)!'%type(arg))
13 years ago
if len(figs) == 0 or figs == 'all':
figs = findallfigs()
return figs
9 years ago
def _fig2wnd(figs):
''' Find figure handle from figure number
'''
FindWindow = win32gui.FindWindow
wnd_handles = []
global _FIG_FORMATS
for fig in figs:
for format_ in _FIG_FORMATS:
winTitle = format_ + ' %d' % fig
13 years ago
hwnd = FindWindow(None, winTitle)
if not hwnd == 0:
wnd_handles.append(hwnd)
return wnd_handles
9 years ago
13 years ago
def _show_figure(figs, cmdshow):
''' sets the specified figure's show state.
@param figs: vector for figure numbers
@param cmdshow: one of following commands:
9 years ago
SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the
window is not responding. This flag should only be used
when minimizing windows from a different thread.
SW_HIDE: Hides the window and activates another window.
SW_MAXIMIZE: Maximizes the specified window.
9 years ago
SW_MINIMIZE: Minimizes the specified window and activates the next
top-level window in the Z order.
SW_RESTORE: Activates and displays the window. If the window is
minimized or maximized, the system restores it to its
original size and position. An application should
specify this flag when restoring a minimized window.
SW_SHOW: Activates the window and displays it in its current size
and position.
SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in the
STARTUPINFO structure passed to the CreateProcess function
by the program that started the application.
SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized
window.
SW_SHOWMINIMIZED: Activates the window and displays it as a minimized
window.
SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This value
is similar to SW_SHOWMINIMIZED, except the window is not
activated.
SW_SHOWNA: Displays the window in its current size and position. This
value is similar to SW_SHOW, except the window is not activated.
SW_SHOWNOACTIVATE: Displays a window in its most recent size and position.
This value is similar to SW_SHOWNORMAL, except the window
is not actived.
SW_SHOWNORMAL: Activates and displays a window. If the window is minimized
or maximized, the system restores it to its original size and
position. An application should specify this flag when
displaying the window for the first time.
'''
BringWindowToTop = win32gui.BringWindowToTop
FindWindow = win32gui.FindWindow
ShowWindow = win32gui.ShowWindow
global _FIG_FORMATS
for fig in figs:
for format_ in _FIG_FORMATS:
winTitle = format_ + ' %d' % fig
13 years ago
hwnd = FindWindow(None, winTitle)
if not hwnd == 0:
9 years ago
# ShowWindow(hwnd,cmdshow)
BringWindowToTop(hwnd)
13 years ago
ShowWindow(hwnd, cmdshow)
9 years ago
13 years ago
def _show_windows(wnds, cmdshow):
''' sets the specified window's show state.
@param wnds: list of window handles numbers
@param cmdshow: one of following commands:
9 years ago
SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the
window is not responding. This flag should only be used
when minimizing windows from a different thread.
SW_HIDE: Hides the window and activates another window.
SW_MAXIMIZE: Maximizes the specified window.
9 years ago
SW_MINIMIZE: Minimizes the specified window and activates the next
top-level window in the Z order.
SW_RESTORE: Activates and displays the window. If the window is
minimized or maximized, the system restores it to its original
size and position. An application should specify this flag when
restoring a minimized window.
SW_SHOW: Activates the window and displays it in its current size and
position.
SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in
the STARTUPINFO structure passed to the CreateProcess
function by the program that started the application.
SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized
window.
SW_SHOWMINIMIZED: Activates the window and displays it as a minimized
window.
SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This
value is similar to SW_SHOWMINIMIZED, except the window
is not activated.
SW_SHOWNA: Displays the window in its current size and position. This
value is similar to SW_SHOW, except the window is not activated.
SW_SHOWNOACTIVATE: Displays a window in its most recent size and position.
This value is similar to SW_SHOWNORMAL, except the
window is not actived.
SW_SHOWNORMAL: Activates and displays a window. If the window is minimized
or maximized, the system restores it to its original size and
position. An application should specify this flag when
displaying the window for the first time.
'''
ShowWindow = win32gui.ShowWindow
BringWindowToTop = win32gui.BringWindowToTop
for hwnd in wnds:
if not hwnd == 0:
9 years ago
# ShowWindow(hwnd,cmdshow)
BringWindowToTop(hwnd)
13 years ago
ShowWindow(hwnd, cmdshow)
9 years ago
def keep(*figs):
''' Keeps figure windows of your choice and closes the rest.
Parameters
----------
figs : list of integers specifying which figures to keep.
Example:
--------
# keep only figures 1,2,3,5 and 7
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(10): f = p.figure(ix)
>>> fig.keep( range(1,4), 5, 7)
or
fig.keep([range(1,4), 5, 7])
>>> fig.close()
See also
--------
pyfig.close
'''
figs2keep = []
for fig in figs:
9 years ago
if isinstance(fig, (list, tuple, set)):
for val in fig:
figs2keep.append(int(val))
13 years ago
elif isinstance(fig, int):
figs2keep.append(fig)
else:
raise TypeError('Only integers arguments accepted!')
13 years ago
if len(figs2keep) > 0:
allfigs = set(findallfigs())
# Remove figure handles in the "keep" list
figs2delete = allfigs.difference(figs2keep)
close(figs2delete)
9 years ago
# for fig in figs2delete:
# close(fig)
9 years ago
def close(*figs):
""" Close figure window(s)
Parameters
----------
figs : list of integers or string
specifying which figures to close (default 'all').
Examples
--------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.close(3,4) # close figure 3 and 4
>>> fig.close('all') # close all remaining figures
or even simpler
fig.close() # close all remaining figures
See also
--------
pyfig.keep
"""
figlist = _figparse(*figs)
wnds = _fig2wnd(figlist)
for wnd in wnds:
win32gui.SendMessage(wnd, win32con.WM_CLOSE, 0, 0)
def restore(*figs):
'''Restore figures window size and position to its default value.
Parameters
----------
figs : list of integers or string
specifying which figures to restor (default 'all').
Description
-----------
RESTORE Activates and displays the window. If the window is minimized
or maximized, the system restores it to its original size and position.
Examples
---------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.restore('all') #Restores all figures
>>> fig.restore() #same as restore('all')
>>> fig.restore(p.gcf().number) #Restores the current figure
>>> fig.restore(3) #Restores figure 3
>>> fig.restore([2, 4]) #Restores figures 2 and 4
or alternatively
fig.restore(2, 4)
>>> fig.close()
See also
--------
fig.close,
fig.keep
'''
figlist = _figparse(*figs)
9 years ago
SW_RESTORE = win32con.SW_SHOWNORMAL # SW_RESTORE
_show_figure(figlist, SW_RESTORE)
9 years ago
def hide(*figs):
'''hide figure(s) window size
Parameters
----------
figs : list of integers or string
specifying which figures to hide (default 'all').
Examples:
--------
13 years ago
>>> import wafo.fig as fig
>>> import pylab as p
>>> for ix in range(5): f = p.figure(ix)
>>> fig.hide('all') #hides all unhidden figures
>>> fig.hide() #same as hide('all')
>>> fig.hide(p.gcf().number) #hides the current figure
>>> fig.hide(3) #hides figure 3
>>> fig.hide([2, 4]) #hides figures 2 and 4
or alternatively
fig.hide(2, 4)
>>> fig.close()
See also
--------
pyfig.cycle,
pyfig.keep,
pyfig.restore
'''
figlist = _figparse(*figs)
SW_HIDE = win32con.SW_HIDE
9 years ago
# SW_hide = win32con.SW_hide
_show_figure(figlist, SW_HIDE)
9 years ago
def minimize(*figs):
'''Minimize figure(s) window size
Parameters
----------
figs : list of integers or string
specifying which figures to minimize (default 'all').
Examples:
---------
13 years ago
>>> import wafo.fig as fig
>>> import pylab as p
>>> for ix in range(5): f = p.figure(ix)
>>> fig.minimize('all') #Minimizes all unhidden figures
>>> fig.minimize() #same as minimize('all')
>>> fig.minimize(p.gcf().number) #Minimizes the current figure
>>> fig.minimize(3) #Minimizes figure 3
>>> fig.minimize([2, 4]) #Minimizes figures 2 and 4
or alternatively
fig.minimize(2, 4)
>>> fig.close()
See also
--------
pyfig.cycle,
pyfig.keep,
pyfig.restore
'''
figlist = _figparse(*figs)
SW_MINIMIZE = win32con.SW_SHOWMINIMIZED
_show_figure(figlist, SW_MINIMIZE)
9 years ago
def maximize(*figs):
'''Maximize figure(s) window size
Parameters
----------
figs : list of integers or string
specifying which figures to maximize (default 'all').
Examples:
---------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.maximize('all') #Maximizes all unhidden figures
>>> fig.maximize() #same as maximize('all')
>>> fig.maximize(p.gcf().number) #Maximizes the current figure
>>> fig.maximize(3) #Maximizes figure 3
>>> fig.maximize([2, 4]) #Maximizes figures 2 and 4
or alternatively
fig.maximize(2, 4)
>>> fig.close()
See also
--------
pyfig.cycle,
pyfig.keep,
pyfig.restore
'''
figlist = _figparse(*figs)
SW_MAXIMIZE = win32con.SW_SHOWMAXIMIZED
9 years ago
# SW_MAXIMIZE = win32con.SW_MAXIMIZE
_show_figure(figlist, SW_MAXIMIZE)
9 years ago
def pile(*figs):
''' Pile figure windows
Parameters
----------
figs : list of integers or string
specifying which figures to pile (default 'all').
Description
-------------
PILE piles all open figure windows on top of eachother
with complete overlap. PILE(FIGS) can be used to specify which
figures that should be piled. Figures are not sorted when specified.
Example:
--------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.pile() # pile all open figures
>>> fig.pile(range(1,4), 5, 7) # pile figure 1,2,3,5 and 7
>>> fig.close()
See also
--------
pyfig.cycle, pyfig.keep, pyfig.maximize, pyfig.restore,
pyfig.stack, pyfig.tile
'''
figlist = _figparse(*figs)
wnds = _fig2wnd(figlist)
numfigs = len(wnds)
13 years ago
if numfigs > 0:
pos = _getScreenSize(wnds)
13 years ago
pos[3] = int(pos[3] / 2)
pos[2] = int(pos[2] / 2.5)
pos[1] = int(pos[3] / 2)
pos[0] = int(pos[2] / 2)
BringWindowToTop = win32gui.BringWindowToTop
MoveWindow = win32gui.MoveWindow
for wnd in wnds:
13 years ago
MoveWindow(wnd, pos[0], pos[1], pos[2], pos[3], 1)
BringWindowToTop(wnd)
def stack(*figs):
''' Stack figure windows
Parameters
----------
figs : list of integers or string
specifying which figures to stack (default 'all').
Description
-----------
STACK stacks all open figure windows on top of eachother
with maximum overlap. STACK(FIGS) can be used to specify which
figures that should be stacked. Figures are not sorted when specified.
Example:
--------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.stack() # stack all open figures
>>> fig.stack(range(1,4), 5, 7) # stack figure 1,2,3,5 and 7
>>> fig.close()
See also
--------
pyfig.cycle, pyfig.keep, pyfig.maximize, pyfig.restore,
pyfig.pile, pyfig.tile
'''
figlist = _figparse(*figs)
wnds = _fig2wnd(figlist)
numfigs = len(wnds)
13 years ago
if numfigs > 0:
screenpos = _getScreenSize(wnds)
13 years ago
maxfigs = numpy.fix(screenpos[3] / 20)
13 years ago
if (numfigs > maxfigs): # figure limit check
print(' More than %d requested ' % maxfigs)
return
BringWindowToTop = win32gui.BringWindowToTop
MoveWindow = win32gui.MoveWindow
13 years ago
GetWindowRect = win32gui.GetWindowRect
#
#
9 years ago
# tile figures by postiion
# Location (1,1) is at bottom left corner
#
9 years ago
# print('Screensz = ',screenpos)
for iy in range(numfigs):
pos = list(GetWindowRect(wnds[iy]))
pos[3] -= pos[1]
pos[2] -= pos[0]
9 years ago
# print('[x, y, w, h] = ', pos)
ypos = screenpos[1] + iy * 20
# int(screenpos[3] - iy*20 -pos[3] -70) # figure location (row)
xpos = int(iy * 5 + 15 + screenpos[0]) # figure location (column)
13 years ago
MoveWindow(wnds[iy], xpos, ypos, pos[2], pos[3], 1)
BringWindowToTop(wnds[iy])
13 years ago
def tile(*figs, **kwds):
''' Tile figure windows.
Parameters
----------
figs : list of integers or string
specifying which figures to tile (default 'all').
kwds : dict with key pairs
specifying how many pairs of figures that are tiled at a time
Description
-----------
TILE places all open figure windows around on the screen with no
overlap. TILE(FIGS) can be used to specify which figures that
should be tiled. Figures are not sorted when specified.
Example:
--------
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(5): f = p.figure(ix)
>>> fig.tile() # tile all open figures
>>> fig.tile( range(1,4), 5, 7) # tile figure 1,2,3,5 and 7
>>> fig.tile(range(1,11), pairs=2) # tile figure 1 to 10 two at a time
>>> fig.tile(range(1,11), pairs=3) # tile figure 1 to 10 three at a time
>>> fig.close()
See also
--------
pyfig.cycle, pyfig.keep, pyfig.maximize, pyfig.minimize
pyfig.restore, pyfig.pile, pyfig.stack
'''
figlist = _figparse(*figs)
wnds = _fig2wnd(figlist)
9 years ago
nfigs = len(wnds) # Number of windows.
13 years ago
if nfigs > 0:
nfigspertile = kwds.get('pairs', nfigs)
ceil = numpy.ceil
sqrt = numpy.sqrt
maximum = numpy.maximum
13 years ago
nlayers = int(ceil(nfigs / nfigspertile))
9 years ago
nh = int(ceil(sqrt(nfigspertile))) # Number of figures horisontally.
nv = int(ceil(nfigspertile / nh)) # Number of figures vertically.
9 years ago
nh = maximum(nh, 2)
nv = maximum(nv, 2)
9 years ago
# Get the screen size.
# --------------------
BringWindowToTop = win32gui.BringWindowToTop
MoveWindow = win32gui.MoveWindow
screenpos = _getScreenSize(wnds)
9 years ago
# scrdim = win32gui.GetWindowPlacement(h)[4]
scrwid = screenpos[2] # Screen width.
scrhgt = screenpos[3] # Screen height.
9 years ago
#
# The elements in the vector specifying the position.
# 1 - Window left position
# 2 - Window top position
# 3 - Window horizontal size
# 4 - Window vertical size
# ------------------------------------------
13 years ago
hspc = 10 # Horisontal space.
9 years ago
topspc = 20 # Space above top figure.
medspc = 10 # Space between figures.
botspc = 20 # Space below bottom figure.
9 years ago
# print('scrwid = %d' % scrwid)
13 years ago
figwid = (scrwid - (nh + 1) * hspc) / nh
9 years ago
# print('figwid = %d' % figwid)
fighgt = (scrhgt - (topspc + botspc) - (nv - 1) * medspc) / nv
figwid = int(numpy.round(figwid))
fighgt = int(numpy.round(fighgt))
9 years ago
#
# Put the figures where they belong.
# -----------------------------------
idx = 0
for unused_ix in range(nlayers):
for row in range(nv):
for col in range(nh):
9 years ago
if (row) * nh + col < nfigspertile:
13 years ago
if idx < nfigs:
9 years ago
figlft = int(screenpos[0] + (col + 1) * hspc +
col * figwid)
figtop = int(screenpos[1] + topspc +
row * (fighgt + medspc))
# figpos = [ figlft figtop figwid fighgt ]; # Figure position.
# fighnd = FindWindow(0,'Figure %d' % figs[idx]) # Figure handle.
fighnd = wnds[idx]
9 years ago
MoveWindow(fighnd, figlft, figtop, figwid, fighgt,
1) # Set position.
BringWindowToTop(fighnd)
9 years ago
# figure(figs[idx]) # Raise figure.
idx += 1
13 years ago
def cycle(*figs, **kwds):
''' Cycle through figure windows.
Parameters
----------
figs : list of integers or string
specifying which figures to cycle through (default 'all').
kwds : dict with the following keys
pairs : number of figures to cycle in pairs (default 1)
maximize: If True maximize figure when viewing (default False)
Description
-----------
CYCLE brings up all open figure in ascending order and pauses after
each figure. Press escape to quit cycling, backspace to display previous
figure(s) and press any other key to display next figure(s)
When done, the figures are sorted in ascending order.
9 years ago
CYCLE(maximize=True) does the same thing, except that figures are
maximized.
CYCLE(pairs=2) cycle through all figures in pairs of 2.
Examples:
>>> import pylab as p
13 years ago
>>> import wafo.fig as fig
>>> for ix in range(4): f = p.figure(ix)
9 years ago
fig.cycle(range(3)) #Cycle trough figure 0 to 2
fig.cycle(range(3) maximize=True) #Cycle trough figure 1 to 3 with figs
# maximized
fig.cycle() #Cycle through all figures one at a time
fig.tile(pairs=2)
9 years ago
fig.cycle(pairs=2) #Cycle through all figures two at a time
>>> fig.close()
See also
--------
pyfig.keep, pyfig.maximize, pyfig.restore, pyfig.pile,
pyfig.stack, pyfig.tile
'''
# TODO : display is not updated for each cycle => function is useless
figlist = _figparse(*figs)
wnds = _fig2wnd(figlist)
numfigs = len(wnds)
13 years ago
if numfigs > 0:
maximize = kwds.get('maximize', False)
pairs = kwds.get('pairs', 1)
9 years ago
if maximize or pairs is None:
nfigspercycle = 1
else:
nfigspercycle = pairs
9 years ago
# n = length(figs);
# nlayers = ceil(n/nfigspercycle);
# Bring one figure up at a time.
9 years ago
i = 0
escape_key = chr(27)
backspace_key = chr(8)
13 years ago
while 0 <= i and i < numfigs:
if maximize:
cmdshow = win32con.SW_SHOWMAXIMIZED
else:
cmdshow = win32con.SW_SHOWNORMAL
13 years ago
iu = min(i + nfigspercycle, numfigs)
wnd = wnds[i:iu]
_show_windows(wnd, cmdshow)
13 years ago
if i + nfigspercycle - 1 < numfigs:
9 years ago
print('Press escape to quit, backspace to display previous ' +
'figure(s) and any other key to display next figure(s)')
9 years ago
# time.sleep(0.5)
B = msvcrt.getch()
9 years ago
if maximize: # restore window position
_show_windows(wnd, win32con.SW_RESTORE)
9 years ago
if B == backspace_key: # Back space
i -= nfigspercycle
13 years ago
elif B == escape_key:
break
else:
i += nfigspercycle
9 years ago
# Sort the figures.
wnds.reverse()
_show_windows(wnds, win32con.SW_SHOWNORMAL)
9 years ago
13 years ago
def test_docstrings():
import doctest
doctest.testmod()
13 years ago
if __name__ == '__main__':
test_docstrings()
9 years ago
# def _errcheck(result, func, args):
# if not result:
# raise WinError()
# return args
#
9 years ago
# def bring_window2top():
# #WINUSERAPI BOOL WINAPI
# #GetWindowRect(
# # HWND hWnd,
# # LPRECT lpRect);
# #
# #Here is the wrapping with ctypes:
# NULL = 0
# SW_HIDE = 0
# SW_NORMAL = 1
# SW_SHOWNORMAL = 1
# SW_SHOWMINIMIZED = 2
# SW_MAXIMIZE = 3
# SW_SHOWMAXIMIZED = 3
# SW_SHOWNOACTIVATE = 4
# SW_SHOW= 5
# SW_MINIMIZE = 6
# SW_SHOWMINNOACTIVE= 7
# SW_SHOWNA = 8
# SW_RESTORE = 9
# SW_SHOWDEFAULT = 10
# SW_FORCEMINIMIZE = 11
# SW_MAX = 11
#
#
# #hwnd = FindWindow(windowname)
# from ctypes import POINTER, WINFUNCTYPE, windll, WinError
# from ctypes.wintypes import BOOL, HWND, RECT, LPCSTR, UINT, c_int
# #Not OK
# prototype0 = WINFUNCTYPE(HWND, LPCSTR,LPCSTR)
# paramflags = (1, "lpClassName"), (1, "lpWindowName")
# FindWindow = prototype0(("FindWindow", windll.user32), paramflags)
#
# # OK
# prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
# paramflags = (1, "hwnd"), (2, "lprect")
# GetWindowRect = prototype(("GetWindowRect", windll.user32), paramflags)
# GetWindowRect.errcheck = _errcheck
#
# #BringWindowToTop(hwnd)
# prototype2 = WINFUNCTYPE(BOOL,HWND)
# paramflags = (1, "hwnd"),
# #Not Ok.
9 years ago
# BringWindowToTop = prototype2(("BringWindowToTop", windll.user32),
# paramflags)
# # Ok
# CloseWindow = prototype2(("CloseWindow", windll.user32), paramflags)
# #Not ok
# prototype3 = WINFUNCTYPE(BOOL, HWND, POINTER(UINT))
# paramflags = (1, "hwnd"), (1, "ncmdshow")
# ShowWindow = prototype3(("ShowWindow", windll.user32),paramflags)
# import win32gui
# h = win32gui.FindWindow(None,'PyLab')
13 years ago
# win32gui.ShowWindow(h,)