如何获取每个打开的窗口的名称列表并将其放入数据框?

问题描述

因此,我试图同时使用win32gui和Pandas来获取打开的Windows的数据帧(df)。 以下是我写的内容,但df最终为空。在测试时,我打开了8个窗口,并希望获得至少包含8行的df。

import win32gui
import pandas as pd

df= pd.DataFrame(columns = ['ID','Window'])

def winEnumHandler( hwnd,ctx ):
    df= pd.DataFrame(columns = ['ID','Window'])
    if win32gui.IsWindowVisible( hwnd ) and len(win32gui.GetwindowText( hwnd ))>0 :
        idv = hex(hwnd)
        winv = win32gui.GetwindowText(hwnd)
        #print (hex(hwnd),",win32gui.GetwindowText(hwnd))
        df = df.append({'ID' : idv,'Window': winv},ignore_index=True)
        

win32gui.EnumWindows( winEnumHandler,None )

print (df)

解决方法

因此从函数中获取数据帧的关键是使用全局变量。这个变量必须在函数内部状态为全局变量,所以不会混淆,python 不会将其视为局部变量。这是代码。

import win32gui
import pandas as pd

dfx = pd.DataFrame() 
i = 0

def winEnumHandler( hwnd,x ):
    global dfx,i

    if win32gui.IsWindowVisible( hwnd ) and len(win32gui.GetWindowText( hwnd ))>0 :
        idv = hex(hwnd)
        winv = win32gui.GetWindowText(hwnd)
        df = pd.DataFrame({'ID' : idv,'Window': winv},index = [i])
        frames  = [dfx,df]
        dfx = pd.concat(frames)
        i += 1

win32gui.EnumWindows( winEnumHandler,i )
print(dfx)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...