2017-02-11 70 views
1

是否有访问函数结果的方法,我已经将另一个函数应用到函数结果上。例如:访问变量从其他包不带全局变量的包中返回一个非返回函数

win32gui.EnumWindows(a_function, extra) 

EnumWindows将遍历所有顶层窗口并将hwnd传递给a_function。

如果我设置了一些条件到grep我想要的HWND,我们需要得到HWND ID

是否有访问从a_function一些回报/收益率的方法。而不是函数EnumWindows将grep返回。

回答

1

EnumWindows不返回任何东西。通常从中检索结果的方式通常是使回调函数将数据存储在全局数据中。在this question中有一个例子。

另一种方式是通过一个可变的容器对象(比如一个list)作为extra参数,它然后将各它被称为时间(第一个参数是一个窗口句柄)传递给回调作为它的第二个参数。

下面是使用第二种技术的示例,该技术将本地列表对象传递给回调函数修改的EnumWindows(),但前提是该窗口可见。

import win32gui 

def my_callback(hwnd, list_object): 
    if win32gui.IsWindowVisible(hwnd): 
     title = win32gui.GetWindowText(hwnd) 
     if title: 
      list_object.append(title) 

def print_windows_titles(): 
    my_list = [] # local variable 

    win32gui.EnumWindows(my_callback, my_list) # populates my_list 

    # print result of calling EnumWindows 
    print('Titles of Visible Windows:') 
    for window_title in my_list: 
     print(' {!r}'.format(window_title)) 

print_windows_titles() 
+0

谢谢你的回答,这是我在想什么。全局变量很好地解决了这个问题。由于避免全局变量是初学者的一个经验法则,我正在考虑是否有一种方法可以访问。在回调和全局hwnd内部​​进行操作确实是解决这个问题的方法。 –

+0

您的意思是我可以将一个list_object传递给extra,并从函数what_i_need_return = win32gui.EnumWindows(a_function,list_object).list_object获取list_object? –

+0

不,我的意思是你可以将一个列表对象传递给'EnumWindows',并且每次调用*** it ***的时候都会传递给你的回调函数。但是你说这是避免使用全局变量的一种方式。 – martineau