3

EnumWindows使用(或FindChildWindows)Win32 API时如何避免使用全局变量?

我大约有以下代码:

HWND prog_hwnd;

BOOL CALLBACK ProgEnumProc(HWND hwnd, LPARAM lParam) {
    if (...) {
        // found the right hwnd, assign it to prog_hwnd;
        prog_hwnd = hwnd;
        return FALSE;
    }
    return TRUE;
}

void FindProgHwnd()
{
    EnumWindows(ProgEnumProc, 0);
}

int main()
{ 
     FindProgHwnd();
     if (prog_hwnd) {
         // found prog_hwnd, but it's global variable
     }
}

如您所见,要找到正确的 hwnd,我必须使用全局变量prog_hwnd。我想避免使用全局变量。有没有办法做到这一点?

4

1 回答 1

7

将指向变量的指针(LPARAM)prog_hwnd作为lParam. 然后在每次调用时将其传递给回调。

在回调中,您可以通过执行分配给传递的变量*(HWND *)lParam = ...

于 2012-10-05T16:38:29.803 回答