Thank you Roger. Your advice did the trick. For anyone interested, the
basic code to terminate a process (politely) would be something like
this (hwnd is retrieved using win32gui.EnumerateWindows):

# Get the window's process id's
t, p = win32process.GetWindowThreadProcessId(hwnd)
# Ask window nicely to close
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
# Allow some time for app to close
time.sleep(10)
# If app didn't close, force close
try:
    handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, p)
    if handle:
        win32api.TerminateProcess(handle,0)
        win32api.CloseHandle(handle)
except:
    pass:

Roger Upole wrote:
> drodrig wrote:
> > Hi.
> >
> > I am trying to close/kill all processes that show visible windows on
> > Windows XP. So far I've created a script that uses win32gui.EnumWindows
> > to iterate through all windows, check for which windows are visible,
> > then send a WM_CLOSE message to the window to request that it closes.
> > Of course, not all apps want to close nicely. At this point I need to
> > use something like TerminateProcess to kill the app, but how do I find
> > the process id (hopefully based on the window id).
> >
> > Thanks for any help.
> >
>
> win32process.GetWindowThreadProcessId should do the trick.
> 
>        Roger

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to