On Tue, 1 Aug 2006 15:34:56 -0400, " Gregory Pi?ero "
<[EMAIL PROTECTED]> wrote:

>Ok I figured out how to do it:
>
>Here's the code I made mostly from copying the examples.  If anyone
>could tell me how the code works, that would still be appriciated, for
>example why/how do I need this function _MyCallback?
>  
>

The EnumWindows API runs through the system's linked list of all
top-level windows.  For every window it finds, it calls a function that
you provide.  If you know C++, it's a lot like the for_each function in
STL.  _MyCallback is the function that gets called, once for every
top-level window.  It is passed the handle of each window in turn, along
with a "context" parameter that you provide.  In your example, the
context parameter is a tuple that will be used to keep track of all of
the windows and window classes that were found.

So, when "get_all_windows" finishes, it returns a dictionary that
contains one entry for every window class.  request_windows_to_close
then checks to see if the class(es) you requested are present in the
dictionary, and if they are, it sends them a WM_CLOSE message.

This code is not actually correct.  There can be many windows for a
given window class, but your get_all_windows function will only return
the last one found for each class.  A better implementation of
_MyCallback would be:

    def _MyCallback( hwnd, extra ):
        hwnds, classes = extra
        hwnds.append(hwnd)
        classn = win32gui.GetClassName(hwnd)
        if not classn in classes:
            classes[classn] = []
        classes[classn].append( hwnd )

Then request_windows_to_close becomes:

    for windesc_to_close in list_window_descs_to_close:
        if windesc_to_close in classes:
            for hwnd in classes[windesc_to_close]:
                win32gui.PostMessage( hwnd, win32con, WM_CLOSE, 0, 0 )
                ...

-- 
Tim Roberts, [EMAIL PROTECTED]
Providenza & Boekelheide, Inc.

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to