2017-02-11 4 views
1

他の関数を適用した関数結果にアクセスする方法はありますか?たとえば、:グローバル変数を持たない他のパッケージからの非リターン関数内の変数へのアクセス

win32gui.EnumWindows(a_function, extra) 

EnumWindowsはすべてのトップレベルウィンドウを繰り返し、hwndをa_functionに渡します。私は私が欲しいHWNDをgrepするために、いくつかの条件を設定した場合

は、我々はHWNDのID

a_functionからいくつかのリターン/歩留まりにアクセスする方法はありますが得にする必要があります。関数EnumWindowsの代わりにリターンをgrepします。

答えて

1

EnumWindows何も返されません。結果が通常そこから取得される方法は、コールバック関数がデータをグローバルに格納することがよくあります。 this questionにその例があります。

もう1つの方法は、変更可能なコンテナオブジェクト(listなど)をextra引数として渡し、呼び出されるたびに(最初の引数がウィンドウハンドルである)コールバックに2番目の引数として渡されます。

次に、コールバック関数が変更するローカルリストオブジェクトをEnumWindows()に渡す2番目の手法を使用した例ですが、ウィンドウが表示されている場合のみです。

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を渡して、関数からlist_objectを得ることができるのですか?what_i_need_return = win32gui.EnumWindows(a_function、list_object).list_object? –

+0

いいえ、あなたは 'EnumWindows'にリストオブジェクトを渡すことができ、***コールされるたびにコールバック関数に渡されることを意味します***。しかし、あなたはそれがグローバル変数の使用を避ける方法であることについて正しいです。 – martineau

関連する問題