[python-win32] IE (ocx) OK, but python never close

Michel Claveau mc at mclaveau.com
Wed Feb 9 15:36:19 CET 2011


Hi!

Starting of a super-exemple from the great Mark Hammond, I made a window 
with IE (ocx) embbed.

It run OK. Thanks to Pywin32's authors.

But...  When my script terminate, Python never close.
My code is huge, but I made a mini-version with the same problem. This 
script is below.

Any idea for a solution?
Thanks in advance.

Michel Claveau



=======================================================
# -*- coding: utf-8 -*-

import time,sys,ctypes
import win32ui, win32gui, win32con, win32api, win32uiole, win32com.client


# fenetre (window)
w_hinst = win32gui.dllhandle

wc = win32gui.WNDCLASS()
wc.lpszClassName = "Mini_win  -  {Echap} pour fermer. "
wc.style =  win32con.CS_GLOBALCLASS| win32con.CS_VREDRAW | 
win32con.CS_HREDRAW
wc.hbrBackground = 
ctypes.windll.gdi32.GetStockObject(ctypes.c_int(win32con.LTGRAY_BRUSH))
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
class_atom = win32gui.RegisterClass(wc)

style = win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU
w_hwnd = win32gui.CreateWindowEx(0, class_atom,"mini_WIN", style, 40,10, 
800,480, 0, 0, w_hinst, None)
w_pyw = win32ui.CreateWindowFromHandle(w_hwnd)


# IE COM/cx
WebBrowserModule = 
win32com.client.gencache.EnsureModule("{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 
0, 1, 1)
if WebBrowserModule is None:
    raise ImportError("IE non trouvé")

class MyWebBrowser(WebBrowserModule.WebBrowser):
    def __init__(self):
        self.__dict__["_dispobj_"] = None

    def CreateControl(self, windowTitle, style, rect, parent, id, 
lic_string=None):
        self.hwnd = win32ui.CreateControl(str(self.CLSID), windowTitle, 
style, rect, parent, id, None, False, lic_string)
        self.__dict__["_obj_"] = self.hwnd
        self.dispobj = 
self.default_interface(win32uiole.GetIDispatchForWindow(self._obj_))
        self.__dict__["_dispobj_"] = self.dispobj

win32ui.EnableControlContainer()
ocx = MyWebBrowser()
ieocx = ocx.CreateControl("Web Browser", win32con.WS_TABSTOP | 
win32con.WS_VISIBLE, (0,20,800,480), w_pyw, 3456)
ocx.Navigate("http://google.fr")


# waiting close/escape
while True:
    if win32gui.GetActiveWindow() != w_hwnd:
        break
    if (win32api.GetKeyState(win32con.VK_ESCAPE) & 0x8000):
        break
    time.sleep(0.01)
    win32gui.PumpWaitingMessages()


# close win
try:
    win32gui.DestroyWindow(w_hwnd)
except:
    pass
time.sleep(0.250)


#quit python
print 62
print sys.exit()
print 64
======================================================= 



More information about the python-win32 mailing list