回調函數
阿新 • • 發佈:2017-06-20
進行 另一個 enabled 它的 基於 gui 返回 機制 baidu
今天用到python的win32gui庫的時候,看到一個
titles = set() def foo(hwnd,mouse): if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd): titles.add(GetWindowText(hwnd)) EnumWindows(foo, 0)
一是不懂為什麽foo()使用時沒傳參數就用了,二是不懂foo()作為參數傳入EnumWindows()難道不需要返回值嗎?
後來查了後發現這是使用了一個叫回調函數的機制,之前只是聽說卻從沒見過,正好借這個機會了解一下。
【回調函數】回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。
不是很懂,而發現函數EnumWindow()正是一個典型的例子
另一個使用回調機制的API函數是EnumWindow(),它枚舉屏幕上所有的頂層窗口,每個窗口都可以通過它調用另一個程序提供的函數,並傳遞窗口的處理程序。
例如:如果被調用者返回一個值,就繼續進行叠代;否則,退出。EnumWindow()並不關心被調用者在何處,也不關心被調用者用它傳遞的處理程序做了什麽,
它只關心返回值,因為基於返回值,它將繼續執行或退出。
這就有點明白了它的用法
回調函數