Windows dialog box removal
SectorUnknown
secun at yahoo.com
Thu Sep 25 16:59:47 EDT 2003
That works great.
Thanks!!!
In article <mailman.1064497835.7752.python-list at python.org>,
dave at pythonapocrypha.com says...
> On Thursday 25 September 2003 06:18 am, SectorUnknown wrote:
> > I've written a Python script that runs a MS Windows program using popen.
> > However, at the end of the Windows program, a dialog box appears and
> > asks for the user to click on OK.
> >
> > Is there a way to have Python set focus on the dialog box and click OK
> > so my script can continue?
> >
> > Does anyone have an example?
>
> I wouldn't be surprised if there's an easier or more correct way to do this,
> but if you can reliably know the title of the window then the code below
> should work (assuming you have ctypes installed):
>
> from ctypes import *
> user32 = windll.user32
>
> EnumWindowsProc = WINFUNCTYPE(c_int, c_int, c_int)
>
> def GetHandles(title, parent=None):
> 'Returns handles to windows with matching titles'
> hwnds = []
> def EnumCB(hwnd, lparam, match=title.lower(), hwnds=hwnds):
> title = c_buffer(' ' * 256)
> user32.GetWindowTextA(hwnd, title, 255)
> if title.value.lower() == match:
> hwnds.append(hwnd)
>
> if parent is not None:
> user32.EnumChildWindows(parent, EnumWindowsProc(EnumCB), 0)
> else:
> user32.EnumWindows(EnumWindowsProc(EnumCB), 0)
> return hwnds
>
> Here's an example of calling it to click the Ok button on any window that has
> the title "Downloads properties" (most likely there are 0 or 1 such windows):
>
> for handle in GetHandles('Downloads properties'):
> for childHandle in GetHandles('ok', handle):
> user32.SendMessageA(childHandle, 0x00F5, 0, 0) # 0x00F5 = BM_CLICK
>
> -Dave
>
>
More information about the Python-list
mailing list