I am running the program mentioned below as an NT service on a terminal server. The service listens on a UDP port for any of a series of commands. In this case, the command "closeApps <user>" will notify the service to close all the open apps for user (<user>). So while the code below works great for a standalone app, it fails as a service because the window handles of each user are not retrievable (I should say I don't know how to retrieve them). Is this even possible? I looked at some of the Windows API calls but nothing stuck out.
Suggestions? drodrig wrote: > 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