1、对于IE6,通过枚举所有的IEFrame即可
2、对于IE6以上的版本,通过枚举所有的TabWindowClass或者Frame Tab即可。
图为spy++抓取的IE8.每开一个IE tab页,即会有一个Frame Tab,一个Frame Tab也对应一个TabWindowClass。
#coding:gbk
import win32gui,win32api,os
def getIEMainVersion(file_name='C:\Program Files\Internet Explorer\iexplore.exe'):
info = win32api.GetFileVersionInfo(file_name, os.sep)
ms = info['FileVersionMS']
ls = info['FileVersionLS']
#version = '%d.%d.%d.%04d' % (win32api.HIWORD(ms), win32api.LOWORD(ms), win32api.HIWORD(ls), win32api.LOWORD(ls))
#return version
return win32api.HIWORD(ms)
def myCallBack(hwnd,extra):
classname=win32gui.GetClassName(hwnd)
if classname == 'IEFrame':
ieFrameList.append(hwnd)
def myChildCallback(hwnd,extra):
classname=win32gui.GetClassName(hwnd)
if classname == 'TabWindowClass':
ieFrameTabList.append(hwnd)
def getIEFrameList():
'''
返回所有类为“IEFrame”的所有handle的list,即IE窗口list
'''
global ieFrameList
ieFrameList = []
win32gui.EnumWindows(myCallBack,0)
return ieFrameList
def getIEFrameTabList():
'''
返回类为“TabWindowClass”的所有handle的list,即IE Tab的list
'''
global ieFrameTabList
ieFrameTabList=[]
for ieframe in getIEFrameList():
print 'ieframe',ieframe
win32gui.EnumChildWindows(ieframe,myChildCallback,0)
return ieFrameTabList
def check_process_exsit_by_number(num):
if getIEMainVersion()=='6':
print 'IE6,need num %d,exist:%d'%(num,len(getIEFrameList()))
if num <= len(getIEFrameList()):
return True
else:
print '非IE6,need: %d,exist :%d'%(num,len(getIEFrameList()))
if num <= len(getIEFrameTabList()):
return True
return False
if __name__ == '__main__':
print check_process_exsit_by_number(3)